byte[] data = new byte[1024];
IAsyncResult ar = net.AcceptedSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, net);
ar.AsyncWaitHandle.WaitOne(500, false);
ISocket s = (ISocket)ar.AsyncState;
int num = s.AcceptedSocket.EndReceive(ar);
byte[] revData = new byte[num];
Array.Copy(data, 0, revData, 0, num);
return revData;
以前我都是写一个回调函数来处理接收的数据,这也是MS官方推荐的,可是现在我想以上述的编程流程处理异步,可以到了int num = s.AcceptedSocket.EndReceive(ar);就非法退出了,任何Exception也没有。这是为什么呢?
IAsyncResult ar = net.AcceptedSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, net);
ar.AsyncWaitHandle.WaitOne(500, false);
ISocket s = (ISocket)ar.AsyncState;
int num = s.AcceptedSocket.EndReceive(ar);
byte[] revData = new byte[num];
Array.Copy(data, 0, revData, 0, num);
return revData;
以前我都是写一个回调函数来处理接收的数据,这也是MS官方推荐的,可是现在我想以上述的编程流程处理异步,可以到了int num = s.AcceptedSocket.EndReceive(ar);就非法退出了,任何Exception也没有。这是为什么呢?
{
string aa=DateTime.Now.ToString("HH:mm:ss:ffff") + "等待超时"
Console.WriteLine(aa);
}
//。..
IAsyncResult ar = net.AcceptedSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, null, net);
bool res=ar.AsyncWaitHandle.WaitOne(500,false);
byte[] revData = new byte[] { };
if(res)
{
ISocket s = (ISocket)ar.AsyncState;
int num = s.AcceptedSocket.EndReceive(ar);
revData = new byte[num];
Array.Copy(data, 0, revData, 0, num);
}
return revData;