代码如下:while(true)
{
result = asyncSock.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None,
ref endPoint, /*new AsyncCallback(TestFrom)*/null, asyncSock);
//if(result.IsCompleted)
// Sign
int receiveBytes = ((Socket)result.AsyncState).EndReceiveFrom(result, ref endPoint);
//if(receiveBytes!=0)
Console.Write("接收了: 个字节: " + Encoding.Unicode.GetString(buffer,0,receiveBytes));
string strContent = Console.ReadLine();
}
上面的代码是在Main函数中;我把Sign下面的那行EndReceiveFrom的代码去掉,则循环不中断,一直会有输出,这个跟我理解的异步是一致的。但是不删掉EndReceiveFrom则会在那一行阻塞起来。我有如下问题:
一、以Begin和End开头的通信函数不都是异步的吗?为什么有EndRecieveFrom函数会将主程序阻塞?
二、没有EndReceiveFrom也可以接收数据,那么它的作用是什么?
三、是不是一定要有EndReceiveFrom才能判断某一次接收了多少字节?直接在BeginReceiveFrom中不可以吗?异步socketUDPC#阻塞