网络编程问题小结
2016-06-02 21:34
190 查看
在C#网络编程中,遇到几处小错误,希望能对各位有帮助!
问题1:在使用序列化生成内存流,然后从内存流中取出byte型数组之前,需要将内存流中的Position设置为初始值(0)。不然会读取为空字节。这样接受方在进行反序列化时会报出二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。
问题2:在反序列化之前也需要先将内存流的Position设置为从头开始,不然会报出在分析完成之前遇到流结尾。
设置内存流初始值方法:1.memStream.Position = 0; 2.memStream.Seek(0, System.IO.SeekOrigin.Begin);
问题3:在进行网络数据传输时,如果是进行复合对象传输,需要指定这一次发送的总长度。当需要发送的数据很大时,需要分多次发送。因为在TCP协议中传输大数据容易出现粘包现象,造成传输失败。UDP中则为丢包现象。
问题4:在进行序列化和反序列化时,当对象为自定义类时,需要在服务器和客户端中均采用同一个类。需要完全一样。连空间名也一样。不然会报出无法找到程序集异常。
问题1:在使用序列化生成内存流,然后从内存流中取出byte型数组之前,需要将内存流中的Position设置为初始值(0)。不然会读取为空字节。这样接受方在进行反序列化时会报出二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。
问题2:在反序列化之前也需要先将内存流的Position设置为从头开始,不然会报出在分析完成之前遇到流结尾。
设置内存流初始值方法:1.memStream.Position = 0; 2.memStream.Seek(0, System.IO.SeekOrigin.Begin);
问题3:在进行网络数据传输时,如果是进行复合对象传输,需要指定这一次发送的总长度。当需要发送的数据很大时,需要分多次发送。因为在TCP协议中传输大数据容易出现粘包现象,造成传输失败。UDP中则为丢包现象。
问题4:在进行序列化和反序列化时,当对象为自定义类时,需要在服务器和客户端中均采用同一个类。需要完全一样。连空间名也一样。不然会报出无法找到程序集异常。
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法