现在client连接到server,在没有数据可读时,read会阻塞在同步情况下,使用whilewhile ((readByte = streamToClient.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
  //操作
}
在异步时,先用BeginRead,在回调函数中继续使用private void ReadComplete(IAsyncResult ar)
{
   lock (streamToClient)
   {
      streamToClient.BeginRead(readBuffer, 0, readBuffer.Length, ReadComplete, null);
   }
}现在的问题,在客户端直接关闭时,都会引发IOException异常,捕获并处理这个异常。
如果客户端直连接,而没有象stream写入数据,那么server读取时,读到字节为0,不会引发异常。如果client向流写入了数据,同步下引发IOException一次,但是为什么异步下会引发多次,因为我在捕获IOException异常后,使用了client.Client.RemoteEndPoint获得IP,然后关闭了流和tcpclient,但是多次引发会导致获得IP时出错,因为对象已经dispose了。
一般对于客户端或服务器端断开的情况,要怎么处理比较合适?只能通过捕获异常吗?最后有一些例子。