[C#] NetworkStream.Write()存在严重bug
来源:互联网 发布:胭脂扣如花知乎 编辑:程序博客网 时间:2024/04/30 14:21
NetworkStream.Write()方法实际上是不可用的,因为它无法保证数据的连续性。
先给大家看一段代码:
//cln is an instance of TcpClient
NetworkStream st = cln.GetStream();
st.Write(tosend, 0, tosend.Length);
这属于NetworkStream.Write()的标准调用方法。可是在catch到IOException之后,我们就会遇上大麻烦。
MSDN上没有对NetworkStream抛出的IOException做详细说明,因此我们只能参考它的基类Stream抛出的IOException的说明,MSDN上是这样说的:If an exception occurs, the position within the stream remains unchanged.
听起来很不错是不是?抓到IOException之后,再重新发送就可以了。可事实并不是这样的。事实是:当NetworkStream.Write()抛出一个IOException的时候,谁也不知道到底有多少个字节已经被发送出去了!
我们用了两天的时间来追踪数据重复的问题,最终的结果让人非常恼火。微软的NetworkStream没有做到他在MSDN里面承诺的“If an exception occurs, the position within the stream remains unchanged.”。
没办法,只能用下面这个方法凑合了:
NetworkStream st = cln.GetStream();
IAsyncResult ar = st.BeginWrite(tosend, 0, tosend.Length, null, null);
if(!ar.AsyncWaitHandle.WaitOne())
{
ErrorLog.WriteError("fail to wait");
}
st.EndWrite(ar);
至少目前看来NetworkStream.BeginWrite()抛出的异常还是比较准确的。
- [C#] NetworkStream.Write()存在严重bug
- C#NetworkStream Read Write问题
- c3p0存在严重bug
- c# NetworkStream.Write工作机制
- 今天发现centos linux在硬盘空间方面存在严重bug
- 中国人民银行的身份认证信息系统存在严重bug
- c++,一个分号照成的严重bug
- 2008-3-25号发布的PL/SQL Developer 7.1.5版本,存在几个严重BUG
- Excel2010条件格式结合公式和格式刷使用存在严重bug
- 史上最严重的BUG
- CSDN的严重BUG!
- JBuilder2007严重Bug
- CAtlHttpClient的一个严重bug
- 暗黑3有严重BUG
- thttpd又一BUG(严重)
- C#:一个增强的NetworkStream(一)构造函数
- C#:一个增强的NetworkStream(二)写入
- C#:一个增强的NetworkStream(三)读取
- 重读《设计模式》之学习笔记(四)--BRIDGE模式
- 在td中输入英文,如何不串格!
- 前言
- java 访问权限表
- 作者的话
- [C#] NetworkStream.Write()存在严重bug
- .Net中关于Label换行问题
- 目录
- string
- 网络管理常用命令
- 学习技术知识要以知识或技术为依据来分类学习和整理,而不能以书本和文章为界限
- 《Struts Web设计与开发大全》 第12章 多模块开发与Struts扩展
- 有关安装Nvidia For Linux显卡驱动后的一点收获
- 分页 sql 语句 及在 asp.net 中自定义 datagrid 分页