Socket详解

说白了,Socket就是服务器跟客户端通讯用的。

网络间如何进行通信?

首先,在网络中,如何判断,“李白”是“李白”而不是“杜甫”呢?

在我们本机中,我们可以通过PID来标识一个唯一进程。

但是在网络中呢?网络并不能通过PID来判断。那网络通过什么呢?通过网络层的“IP”我们可以判断一个唯一的主机,然后通过传输层的“协议+端口号”我们可以判断此主机中的一个应用程序(进程)。

就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。

什么是Socket?

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read-->关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

Socket流程

第一阶段,连接阶段(三次握手)


connect在第二个握手阶段返回,accept在第三个阶段返回

第二阶段,读写阶段

万事具备只欠东风,至此服务器与客户已经建立好连接了。可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信!网络I/O操作有下面几组:

read()/write()

recv()/send()

readv()/writev()

recvmsg()/sendmsg()

recvfrom()/sendto()

我推荐使用recvmsg()/sendmsg()函数,这两个函数是最通用的I/O函数,实际上可以把上面的其它函数都替换成这两个函数

第三阶段,关闭阶段(四次挥手)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容