• 基于TCP实现的Socket通讯详解


    Socket通信是基于TCP协议进行的传输层通信,是在应用和应用之间的通信,一般应用在即时通讯上。

    建立连接

    用Socket创建连接需要在客户端和服务端都使用socket套接字。

    Linux内存创建Socket,只是创建的socket使用有些差异。

    public class EchoServer{
             private int port;
             Socket socket;
             public EchoServer(int port){
                 this.port = port;  
            }  
           
             private void run() throws IOException{
                 ServerSocket serverSocket = new ServerSocket(port);
                 while(true){
                    socket = serverSocket.accept();
                    new Thread(()->{
                        write(socket);
                    }).start();
                 }
            }
    
            private void write(Socket socket){
                 InputStream in =  socket.getInputStream();  
                 OutputStream out = socket.getOutputStream();
                 int n ;
                 byte[]  b = new byte[1024];
                 while((n=in.read(b))>0){
                       out.write(b,0,b.length);
                 } 
            }
            public void static main(String[] args){
                 EchoServer server = new EchoServer(7890);
                 server.run();
            }
     }
    
    public class EchoClient{
         private Socket socket;
         private static String host;
         private static int port;
    
         public EchoClient(String host,int port){
             this.host = host;
             this.port = port;
         }
    
          public void run() throws IOException{
              InputStream in = socket.getInputStream();
              OutputStream out = socket.getOutputStream();
              new Thread(()->{
          int n ;
              byte[] b = new byte[1024];
              while((n=in.read(b))>0){
                 System.out.write(b,0,b.length);
              }
              }).start();
              int n ;
              byte[] b = new byte[1024];
              while((n=System.out.read(b))>0){
                 out.write(b,0,n);
              }
          }
         public void static main(String[] args){
               EchoClient client = new EchoClient("localhost",7890);
               client.run();
                        
         }
    }
    

      

    一种Socket的用处是监听,叫做ServerSocket,这种Socket会调用listen的方法,监听连接上的套接字。

    另一种socket的用处是连接,它调用connect方法,作用为服务端和客户端的通讯连接套字。

    一个完整的TCP通信,在服务端和客户端总计创建三个socket。

    一个监控的socket在服务端监控连接成功的客户端套接字,并在接收连接后产生一个连接的socket.

    一个连接的socket在客户端请求发起连接。

  • 相关阅读:
    OAuth2.0的四种授权模式
    Jedis整合单机、Sentinel和Cluster模式
    Redis Cluste部署
    Web-动态页面
    Web开发-Servlet&HTTP&Request
    Ajax&Json
    Web开发之Tomcat&Servlet
    PagedListCore的使用
    自己写一个依赖注入容器Container
    在core2.0中实现按程序集注入依赖
  • 原文地址:https://www.cnblogs.com/gzhich2019/p/11899128.html
Copyright © 2020-2023  润新知