TCP通讯

Socket类为网络通讯提供了一套丰富的方法和属性。     
Socket允许使用ProtocolType枚举中所列出的任何一种协议执行同步和异步数据传输。如果需要使用较为简单的应用程序,而且不需要太高的性能。建议使用UdpClient和TcpClient、TcpListener。
一般说来Tcp通讯包含:服务端与客户端两部分。下面我从一个类似聊天室的程序来阐述基于Socket的Tcp通讯。下一章节,我将会阐述UDP通讯。


在调用Scoket类的方法时,必须先对Socket类使用指定的地址簇,套接字类型和协议初始化Socket类的新实例。

Socket ServerSK = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

针对服务端,使用Socket与一个本地的终结点相关联。

IPEndPoint endIpInfo = new IPEndPoint(IPAddress.Parse(Ip),port);
ServerSK.Bind(endIpInfo );

关联终结点后,需要把Socket置于侦听的状态。

 

ServerSK.Listen(50);

Listen 的参数是指侦听队列的长度。在侦听之前必须调用Bind方法,否则将会引发异常。
调用Accept方法会以同步的方式侦听套接字的连接请求队列中第一个被挂起的连接请求,然后创建并返回新的Socket。

 

 ClientSK[ClientNum] = ServerSK.Accept();

Socket的RemoteEndPoint方法可标识远程连接的端口号及网络地址。


调用新建的Socket对象的BeginReceive方法可开始从连接的Socket中异步的接受数据。(此方法必须有EndReceive方法与之对应)


 

ClientSK[ClientNum].BeginReceive(refBuffer ,0,refBuffer.Length,0,new AsyncCallback(ReceiveCallBack),ClientSK[ClientNum]);

在接受数据时,可调用 AsyncCallback 委托来引用操作完成时需要调用的方法。此异步操作的方式可实现IAsyncResult 接口。
调用连接的Socket的sned或SendTo发放将数据发送到远程终端主机。
对于客户端来说,只是调用Connet方法来建立与远程主机的连接。
源码附上,不再鳌述。更多方法还请读者自己实践。

服务端源码:


 

Code

 

客户端代码:

 

 

Code

 

把源码也附上,各位可以参考。不足之处希望给予指点。

/Files/dwwwing/TcpCon.rar 

posted @ 2009-06-08 19:34  dwwwing  阅读(970)  评论(1编辑  收藏  举报