基于socket通信的C/S通信
socket是通信系统双方建立的一个标准约定,即“接头暗号”,其内部封装有各种网络通信所需要的功能函数。系统中的应用层功能的实现是需要通过传输层进行服务中转的,分布式的系统决定了网络系统中同一时间内应用程序可能是多个的,但是传输层只能有一个,此时传输层就需要同时为多个应用程序进程提供并发服务。socket接口能够为不同的应用程序进程和网络连接创建各自的身份标识,规范应用程序与TCP/IP协议之间的数据交互。
1、socket通信原理
应用程序进程间的网络通信和连接的身份主要通过目标IP地址、传输层协议和端口号三个参数标识。每个socket都绑定有IP地址、端口、端口号这3个参数。传输层借助socket服务,区分不同的应用程序进程或网络连接,并分别对其提供对应的数据传输服务。
网络系统中的每一个基于TCP/IP协议进行通讯的程序都配置有唯一的端口和端口号。端口是用来存储socket中输入和输出的数据信息,端口号是一个范围为0-65535的16位无符号整数,主机上的每一个程序都有唯一的端口号。一般来说,主机中的标准应用程序使用256以下的端口号。
基于socket的C/S通信模式如上图所示。socket是2个应用程序进行网络通信的“中间人”,而且是成对存在的。一端的应用程序把需要传输的数据信息写入相对应的socket中,该socket将数据信息传送给与之配对的另外一个socket中,进而使数据信息流转到目标程序中。正常情况下,一个server需要为很多client提供服务,这意味着服务器端需要维护多个socket,一个socket负责与一个客户端通信。
2、socket类别
socket套接字主要有SOCK_STREAM和SOCK_DGRAM两类。
SOCK_STREAM能够为应用程序提供可靠的网络连接,适用于连续的数据流传输,使用TCP作为下层协议。此类型使用最普遍,HTTP、SMTP、POP3等都是使用此类套接字。
SOCK_DGRAM是无连接的套接字,使用UDP作为下层协议,可以设置最大缓冲区的容量。对数据传输的可靠性要求不高且发送的数据包较小的应用程序使用SOCK_DGRAM,比如音频和视频应用程序。
不同于SOCK_STREAM,SOCK_DGRAM比较注重传输效率,是以保证传输速度为第一目标的,既不能保障数据传输的可达性,也无法确保数据包传输顺序的正确性。
声明:本文参考张宏帅的硕士论文《基于 TCP/IP 协议的 FANUC-DNC 系统研究与
开发》