基于TCP实现的Socket通讯详解

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

建立连接

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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();
        }
 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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在客户端请求发起连接。

 

 

posted @   IT知识生产小店铺  阅读(434)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示