运行此代码时:
private async void StartChat(Object obj)
{
TcpClient me = (TcpClient)obj;
UpdateChatBox("Attempting read from server.");
myBuffer = new byte[BUFFER_SIZE];
while (true)
{
var myStream = me.GetStream();
myStream.BeginRead(myBuffer, 0, BUFFER_SIZE, new AsyncCallback(UpdateChatBoxAsync), myStream);
if (messageToSend)
{
await myStream.WriteAsync(myMessage, 0, myMessage.Length);
}
}
}
我收到以下 IO 异常BeginRead
:
无法从传输连接读取数据:无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满。
下面是 BeginRead 的回调方法:
private void UpdateChatBoxAsync(IAsyncResult result)
{
var stream = result.AsyncState as NetworkStream;
int bytesRead = stream.EndRead(result);
if (bytesRead > 0)
{
String newMessage = NetworkUtils.GetString(myBuffer);
UpdateChatBox(newMessage);
}
}
有人可以说明引发此异常的原因吗?我每次都尝试在 while 循环开始时重新创建缓冲区,但是虽然这样做不会引发异常,但我不会从服务器接收消息。
我还尝试在 UpdateChatBoxAsync 结束时将 myBuffer 重置为空数组,这也不起作用。
任何帮助,将不胜感激。