初识socket
2017-05-06 本文已影响18人
清水芦苇
首先声明哦,
它和websocket完全是两个概念。websocket是一个全双工通讯协议。而socket是作为进程通讯机制而存在的,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
下面这段文字摘抄自segmentfault中的一个答案(我觉得还挺通俗易懂的):
socket 在操作系统里面是一个文件描述符, 和普通的文件的文件描述符一样,可以通过系统调用 read(), write()进行读取和写入数据.
每一个socket 其实有几个重要的参数, 本机ip,本机port,对端ip,对端port,以及协议等, 这几个通常要是unique的, 操作系统才不会把socket 和 socket 之间搞混.
服务器端的程序,一般会把socket 和某一个ip,port 端口bind 起来, 这样构成了一个特殊的socket, 这个socket 没有对端ip和对端port, 只有本机ip和本机port.
你可以把这个socket 看成是一个特殊的文件(好比登记表), 当有新的连接进来的时候, 都可以通过 accept 系统调用让操作系统接受一个新的连接, 同时返回一个新的socket, 这个socket 是绑定在(本机ip,本机port,对端ip,对端port) 这个上面的, 也就是对应了一个unique的连接.
然后你可以拿着这个新产生的socket 进行写入和读取等操作(因为它是一个文件描述符). 那个用来listen的socket 和这个新的socket 是不相关的,在操作系统内部也是分开的,会有各自的缓冲区等.