我的JAVA学习之路

Socket详解

2018-01-03  本文已影响20人  独念白

说白了,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函数,实际上可以把上面的其它函数都替换成这两个函数

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

上一篇 下一篇

猜你喜欢

热点阅读