Socket的使用

要通过互联网进行通信,至少需要一对Socket,其中一个为ClientSocket客户端使用,另一个ServerSocket服务器端使用,两Socket连接过程分三步骤:
1)服务器监听Listening;ServerSocket并不定位具体的客户端Socket,而是处于等待连接状态,实时监控网络状态。
2)客户端请求Request;ClientSocket发出连接请求(Connect Request),要连接的目标是服务器端的Socket。ClientSocket首先必须描述它要连接的ServerSocket,指出ServerSocket的地址(如IPv4或IPv6)和端口号Port,然后就向ServerSocket发出连接请求。
3)连接确认;当ServerSocket监听到或者接收到ClientSocket的连接请求,它就响应ClientSocket的请求,建立一个新的线程来处理此请求,然后把ServerSocket的描述发给客户端,一旦客户端确认了此描述,连接就成功建立。而ServerClient继续处于监听状态,继续接收其他ClientSocket的连接请求(因为每次请求都是交给新线程来处理的)。

.Net中Socket的命名空间:System.Net.Sockets
网络协议的命名空间:System.Net

以下是一些例子:
(1)利用Socket发送一个Http请求:
这里只使用到一个ClientSocket;主要反应了三步骤中的第(2)(3)两步骤;SeverSocket由Web服务器来扮演。
HttpGetRequest

Main
测试如下:


(2)基于C/S架构的同步Socket示例
在这里可以看到ServerSocket和ClientSocket的演示,并完全体现三个步骤(1)(2)(3)中.Net中的实现。
同步方式主要使用:Accept、Receive、Send三个同步方法。
同步方式:发送方发送数据包后,不等待接收方响应就立即接着发送下一个数据包。
使用此方式,Client或Server执行Socket连接、接收、发送操作时,Client或Server会中止工作,处于暂停状态。编程较简单,当对于需要网络操作比较繁重的时候并不太适合,此时需要采用异步方式。

1)对于Server的同步方式,在连接请求到来之前,ServerSocket一直处于Listen状态,而服务器则处于中止等待状态;当连接请求到来后,ServerSocket调用Accept方法,返回一个与ClientSocket相连的Socket处理此请求。直到请求完成后ServerSocket才继续监听等待。因为同步方式只使用一个线程来处理监听请求和响应请求。
SyncServerDemo

2)Client的同步方式,ClientSocket负责发出连接请求和请求数据,并接收返回的数据。同样是在单线程中处理请求和处理返回数据。
SyncClientDemo

测试如下:


(3)基于C/S架构的异步Socket示例
异步方式对应有:BeginAccept、EndAccept,BeginReceive、EndReceive,BeginSend、EndSend等方法。
异步方式:发送方发送一个数据包后,一直等到接收方响应后,才接着发送下一个数据包。

1)异步服务器端AsyncServer,异步Socket可在监听同时进行其他操作,如发送数据和读取数据。对于网络操作负荷比较大的程序来说特别适合。
对于异步ServerSocket,需要一个方法开始接受网络连接请求,一个回调方法AcceptCallback处理连接请求,一个回调方法ReceiveCallback处理接收数据,一个回调方法SendCallback处理发送数据。
AsyncServerDemo

使用之前编写的同步客户端SyncClient访问上面的异步服务器端AsyncServer,测试如下:


2)异步客户端AsyncClient
AsyncClientDemo

测试如下:



(4)总结:
只要明白Socket的工作原理,即三步骤,就可以轻松地利用Socket编写网络程序。
posted @ 2007-01-15 14:12  MK2  阅读(4329)  评论(2编辑  收藏  举报