zoukankan      html  css  js  c++  java
  • Socket编程

    1.socket的简介

    【1】什么是socket 
    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序。

    2.什么是TCP协议

    2.1 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。

    3.如何运用Socket实现简单的客服端和服务端

    实现效果:客服端可以一直向服务端发送消息,服务端一直响应客服端。

    客服端:

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.Scanner;
    
    //Socket实现客服端
    public class SocketClient {
    
        public static void main(String[] args) {
            while (true){
                System.out.println("请输入你要发送的内容:");
                Scanner scanner=new Scanner(System.in);
                String context=scanner.next();
                senMessage(context);
            }
        }
        public static  void senMessage(String context){
            OutputStream os=null;
            Socket sk=null;
            InputStream is=null;
            try {
                //创建Socket客服端,绑定服务器的IP和端口号
                sk = new Socket("localhost",888);
                //获取输出流
                os = sk.getOutputStream();
                //向输出内容
                //以字节流的形式写出
                os.write(context.getBytes());
           os.flush();
    //关闭输出流,接收服务器端的响应 sk.shutdownOutput(); is=sk.getInputStream(); byte[] bytes=new byte[1024]; int len=-1; while ((len=is.read(bytes))!=-1){ String str=new String(bytes,0,len); System.out.println(str); } } catch (IOException e) { e.printStackTrace(); }finally { if (os!=null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); }finally { if(sk!=null){ try { sk.close(); } catch (IOException e) { e.printStackTrace(); }finally { if (is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } } }

    服务端:

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class SocketServe {
    
        public static void main(String[] args) {
            while (true){
                acceptMessage();
            }
        }
    
        public static void acceptMessage(){
            //ServerSocket类实现服务器套接字。服务器套接字等待请求通过网络传入。
            // 它基于该请求执行某些操作,然后可能向请求者返回结果。
            ServerSocket serverSocket=null;
            InputStream is=null;
            Socket client=null;
            OutputStream out=null;
    
            try {
                serverSocket = new ServerSocket(888);
                /**
                 * Socket accept() :侦听并接受到此套接字的连接。
                 * 返回Socket对象,该对象封装了接收到数据包的相关信息,
                 * 操作该对象,可以处理正文数据,及端口信息和IP信息等
                 */
    //            System.out.println("acept-start");
    
                client=serverSocket.accept();
    //            System.out.println("accept-end");
                //读取源IP
    //            System.out.println(client.getLocalAddress());
                //读取客服端发送的数据(接收客服端发送的数据)
                //获取输入流
                is=client.getInputStream();
                byte[] bytes=new byte[1024];
                //读取内容长度大小:-1
                int len =-1;
                while ((len=is.read(bytes))!=-1){
                    //操作读取数据
                    String str=new String(bytes,0,len);
                    System.out.println(str);
                }
                //响应客服端
                out= client.getOutputStream();
                String context="你好,我是服务器端";
                out.write(context.getBytes());
           out.flush(); }
    catch (IOException e) { e.printStackTrace(); }finally { //从下向上释放资源 if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); }finally { if (client!=null){ try { client.close(); } catch (IOException e) { e.printStackTrace(); }finally { if (serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); }finally { if (out!=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } } } } } } }
  • 相关阅读:
    navicat设置唯一
    H5图片防盗链处理
    jar包更新
    微信小程序开发工具“当前系统代理不是安全代理”
    Set和Map
    OSS先后上传相同地址的图片
    js遍历删除数组中不符合条件的元素
    SSL配置
    关于socket.io获取客户端真实IP地址
    请在微信客户端打开链接 html
  • 原文地址:https://www.cnblogs.com/cw1886/p/9447302.html
Copyright © 2011-2022 走看看