基于TCP协议的异步通讯(c#)
:
在同步模式中,ept方法接入连接请求,而在客户端我们则使用Connect方法来连接服务器。相对地,在异步模式下,ept方法来完成连接到客户端的任务,在客户端则通过BeginConnect方法和EndConnect方法来实现与服务器的连接。
ept在异步方式下传入的连接尝试,ept之前,必须使用Listen方法来侦听是否有连接请求,等待他把请求放入消息队列中参数列表为:
ept(allBack, Ojbect state)
allBack:代表回调函数
state:表示状态信息,必须保证state中包含socket的句柄
ept()方法来完成操作,该方法返回新的套接字对象,并在以后的通信中可以使用该套接字。其基本流程是:
(1)创建本地终节点,并新建套接字与本地终节点进行绑定;
(2)在端口上侦听是否有新的连接请求;
(3)请求开始接入新的连接,传入Socket的实例或者StateOjbect的实例
代码
//定义IP地址
IPAddress local=(",0,1");
IPEndPoint iep=new IPEndPoint(local,13000);
//创建服务器的socket对象
server=new Socket(,,)
(iep);
(20);
(New allBack(Accept),server);
ept()方法调用结束后,一旦新的连接发生,将调用回调函数,ept()方法。
该方参数列表为 Socket ept(IAsyncResult iar)
下面为回调函数的实例:
void Accept(IAsyncResult iar)
{
//还原传入的原始套接字
Socket MyServer=(Socket);
//ept方法,返回新的套接字
service=(iar);
}
服务器端已经准备好了,那么客户端应通过BeginConnect方法和EndConnect来远程连接主机。在调用BeginConnect方法时必须注册相应的回调函数并且至少传第一个Socket的实例给state参数,以保证EndConnect方法中能使用原始的套接字。下面是一段BeginConnect的调用:
代码
Socket socket=new Socket(,,)
IPAddress ip=("");
IpEndPoint iep=new IPEndpoint(ip,13000);
(iep, new allBack(Connect),sock);
EndConnect是一种阻塞方法,用于完成BeginConnect方法的异步连接诶远程主机的请求。Reuslt作为参数。下面为代码演示:
代码
void Connect(IAsyncResult iar)
{
client=(socket);
try
{
(iar);
}
Catch(SocketException)
{
("无法连接");
}
Finally
{
}
}
etpTcpClient方法处理一个传入的连接尝试。etpTcpClient方法的代码:
代码
public static void ept(TcpListener listner)
{
//开始从客户端监听连接
("Waitting for a connection");
//接收连接
//开始准备接入新的连接,eptTcpCliet
(
new allBack(eptTcpCliet),
listner
);
}
//处理客户端的连接
public static void eptTcpCliet(IAsyncResult iar)
{
//还原原始的T
异步通信 来自淘豆网m.daumloan.com转载请标明出处.