“学习的敌人是自己的满足。” —— 叶圣陶
文章目录
- TCP套接字编程
- TCP套接字编程概述
- 客户进程
- 服务器进程
TCP套接字编程
TCP套接字编程概述
TCP是一个面向连接的运输层协议,因此可以分为发起连接的阶段和传输阶段。
- 发起连接时,客户进程创建一个客户套接字并与“欢迎套接字”进行“三次握手”。
- 欢迎套接字是服务器进程一直运行的一个套接字,它接收来自所有客户进程的发起TCP连接请求(“三次握手”),并在这个过程中为每个客户创建一个新的专属于它的连接套接字进行信息传输。
- 三次握手是TCP协议中的客户进程和服务器进程在创建一个TCP连接时为了确认一些基本信息所进行的信息传输。具体过程在传输层时会讲到。
- 注意,欢迎套接字对所有客户共享,在欢迎之后服务器才会创建对于某个客户的连接套接字。举个例子:
在这张图中,A和B是两个不同的客户进程。可以看到它们向相同的欢迎套接字发起三次握手,用专属于它们自己的连接套接字进行传输。
- 在传输阶段,客户向服务器发送请求并接收来自服务器的响应报文。
客户进程
客户进程的代码如下:
我们观察这段代码中与UDP不同的部分。
- 第四行创建了客户套接字,与UDP相比,它的第二个参数指示生成一个TCP套接字而非UDP。
- 由于TCP是面向连接的运输层协议,因此第五行表示将连接请求发给“欢迎套接字”以生成一个TCP连接。
- 由于已经与连接套接字生成了连接,所以在第七行传输信息时不用指定服务器端套接字的位置。
- 第八行中也因为同样原因无需传输地址信息。
服务器进程
服务器进程代码如下:
依然讨论这段代码中特别的部分:
- 注意,这段代码创建了欢迎套接字和连接套接字,最后关闭了连接套接字,保持欢迎套接字开启。
- 第五行表示让serverSocket(欢迎套接字)调用listen函数,聆听客户的连接请求,函数的参数是同时请求连接的最大数。
- 循环内的第一行调用accept函数,它接受了客户的连接请求,创建了一个连接套接字connectionSocket。
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!