zoukankan      html  css  js  c++  java
  • 基于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在客户端请求发起连接。

  • 相关阅读:
    对象遍历 for in ,数组遍历for in 与 for of 的区别
    计算一个数组中key值相同的数量
    VUE的两种跳转push和replace对比区别
    微信公众号二次分享ios分享失败问题
    获得对象中的键或值
    第一个table根据checkbox选择tr,在另一个table中显示对应索引的tr(jq遍历的运用)
    checkbox 全选反选 获得所有的checkbox
    为什么jQuery要return this.each()?
    用jq代码写出一个轮播图。
    页面滚动到一定位置,两个div 朝中间运动。
  • 原文地址:https://www.cnblogs.com/gzhich2019/p/11899128.html
Copyright © 2011-2022 走看看