根据进程在网络通信中使用的协议,可以将socket通信方式分为两种:面向连接、基于TCP协议的通信;另一种是面向无连接,基于UDP协议的通信。
当使用面向连接的方式进行通信时,服务器和客户机先各自创建socket文件,服务器调用bind()函数绑定服务器端口和地址。之后服务器通过接口listen()设置可连接的数量。若客户端需要与服务器进行交互,客户端会调用connect()函数向已知服务器地址端口发送连接请求并 阻塞 等待服务器应答。服务器监听到请求连接以后,会调用accept()函数试图进行连接。若服务器为到达最大连接数量,便成功建立连接,此后客户端解除阻塞,两端可正常通信。否则服务器忽略本次连接。最后当通信完成以后,双方各自调用close()函数,关闭socket文件,释放资源。
当使用面向无连接的方式进行通信的时候,服务器和客户机各自创建自己的socket文件,再由服务器调用bind()函数绑定服务器地址和端口。此后通信双方可以开始通信,需要注意的,因为服务器与客户机尚未建立连接,所以客户端每次向服务器发送数据时,都需要额外的指定服务器的地址端口。同样的,若服务器需要向客户端发送数据,服务器也需要额外指定地址端口。通信结束以后,通信双方需要调用close()函数,关闭socket文件,释放资源。