C#套接字编程,用TcpClient接收服务端的套接字,那怎么给它实现一个接收信息的回调函数啊?
如下图,就是用正常那个socket异步接收的,人家有个BeginReceive()里面带有一个接收信息的回调函数的,但是用TcpClient定义的,我找不到一个类似的方法...
如下图,就是用正常那个socket异步接收的,人家有个BeginReceive()里面带有一个接收信息的回调函数的,但是用TcpClient定义的,我找不到一个类似的方法,貌似只有BeginConnect有个回调方法。
我这个是服务器,用TcpClient来接收客户端的套接字的,
我不想用个while(true)一直监听,好麻烦,while里面做点别的什么操作到不行.... 展开
我这个是服务器,用TcpClient来接收客户端的套接字的,
我不想用个while(true)一直监听,好麻烦,while里面做点别的什么操作到不行.... 展开
1个回答
展开全部
你的程序里NetworkStream 放到while外 。服务只侦听。不需要主动去连接客户端。所以不用 BeginConnect。可以异步读BeginRead
byte[] buffer=new byte[1024];
streamClient.BeginRead(buffer, 0, BufferSize, callBack, null);
回调方法:
private void OnReadComplete(IAsyncResult ar)
{
int bytesRead = 0;
try
{
lock (streamToClient)
{
bytesRead = streamToClient.EndRead(ar);
}
if (bytesRead == 0) throw new Exception("读取到0字节");
string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
//msg为接收到的信息
}
// 再次调用BeginRead()
lock (streamToClient)
{
AsyncCallback callBack = new AsyncCallback(OnReadComplete);
streamClient.BeginRead(buffer, 0, BufferSize, callBack, null);
}
}
catch (Exception ex)
{
if (streamToClient != null)
streamClient.Dispose();
client.Close();
}
}
byte[] buffer=new byte[1024];
streamClient.BeginRead(buffer, 0, BufferSize, callBack, null);
回调方法:
private void OnReadComplete(IAsyncResult ar)
{
int bytesRead = 0;
try
{
lock (streamToClient)
{
bytesRead = streamToClient.EndRead(ar);
}
if (bytesRead == 0) throw new Exception("读取到0字节");
string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
//msg为接收到的信息
}
// 再次调用BeginRead()
lock (streamToClient)
{
AsyncCallback callBack = new AsyncCallback(OnReadComplete);
streamClient.BeginRead(buffer, 0, BufferSize, callBack, null);
}
}
catch (Exception ex)
{
if (streamToClient != null)
streamClient.Dispose();
client.Close();
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询