关于NetworkStream.Read异常的问题

cc_net 2010-08-20 10:08:58
现在client连接到server,在没有数据可读时,read会阻塞

在同步情况下,使用while

while ((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了。


一般对于客户端或服务器端断开的情况,要怎么处理比较合适?只能通过捕获异常吗?最后有一些例子。

...全文
700 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍月 2010-08-20
  • 打赏
  • 举报
回复
友情帮顶!!!
cc_net 2010-08-20
  • 打赏
  • 举报
回复
很奇怪,今天试了下,异步时客户端直接关闭,不会多次引发IOException了。。。饿!

那就问问大家,对于客户端或服务器 端断开时,一般如何知道和处理的
CGabriel 2010-08-20
  • 打赏
  • 举报
回复
异步下可能有好几次通信积累下来了,所以有多个异常。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧