首先从原理上解释一下采用 Socket 接口的网络通讯,这里以最常用的 C/S 模式作为
范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来 连接,服务程序
等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。
客户端在需要的时刻发出向服务端的连接请求。这里为 了便于理解,提到了一些调用及其
大致的功能。使用 socket 调用后,仅产生了一个可以使用的 socket 描述符,这时还不能进
行通信,还要使用其他的调 用,以使得 socket 所指的结构中使用的信息被填写完。
在使用 TCP 协议时,一般服务端进程先使用 socket 调用得到一个描述符,然后使用 bind
调用将一个名字 与 socket 描述符连接起来,对于 Internet 域就是将 Internet 地址联编到
socket。之后,服务端使用 listen 调用指出等待服务请 求队列的长度。然后就可以使用
accept 调用等待客户端发起连接,一般是阻塞等待连接,一旦有客户端发出连接,accept
返回客户的地址信息,并返回 一个新的 socket 描述符,该描述符与原先的 socket 有相同
的特性,这时服务端就可以使用这个新的 socket 进行读写操作了。一般服务端可能在
accept 返回后创建一个新的进程进行与客户的通信,父进程则再到 accept 调用处等待另一
个连接。客户端进程一般先使用 socket 调用得到一个 socket 描述符,然后使用 connect
向指定的服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的
连接,这时就可以通过 socket 描述符进行读写操作了。
.NetFrameWork 为 Socket 通讯提供了 System.Net.Socket 命名空间,在这个命名空间
里面有以下几个常用的重要类分别是:
·Socket 类这个低层的类用于管理连接,WebRequest,TcpClient 和 UdpClient 在内部
使用这个类。
·NetworkStream 类这个类是从 Stream 派生出来的,它表示来自网络的数据流
·TcpClient 类允许创建和使用 TCP 连接
·TcpListener 类允许监听传入的 TCP 连接请求
·UdpClient 类用于 UDP 客户创建连接(UDP 是另外一种 TCP 协议,但没有得到广泛的使
用,主要用于本地网络)
下面我们来看一个基于 Socket 的双机通信代码的 C#版本
首先创建 Socket 对象的实例,这可以通过 Socket 类的构造方法来实现:
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType
protocolType);
其中,addressFamily 参数指定 Socket 使用的寻址方案,socketType 参数指定
Socket 的类型,protocolType 参数指定 Socket 使用的协议。
下面的示例语句创建一个 Socket,它可用于在基于 TCP/IP 的网络(如 Internet)上
通讯。
评论3