SOCKET客户变成XP就出错,请高人指点。[我快要爆炸了,原来好好的程序怎么就出了这么多的错误]

yhy0611 2008-11-07 04:15:43
服务器端是2003,开发的时候客户端也在03的系统上,现在把客户端装到XP上就出了问题。

错误提示是:返序列化相关的错误,有无法将位于索引 66 处的字节 [FF] 由指定的代码页转换为 Unicode。正在试图对空流进行反序列化。在分析完成之前就遇到流结尾。这三种

我测试了一下,返序列化错误时,一般是准备返序列化的数据为空或者不完整。如果这么分析,那就是socket收到的包不完整了(汗),但我的程序中,客户端己经在发送之前加了个我头为长度,服务器端也在接收完成之后才会继续执行其它操作,可不知道为什么,接收到的包会不完整呢?
我测试了N次,如果客户端是2003,从来不会报这样的错误。但一换成XP,就经常性的出现,检查客户端发送数据的代码又找不到BUG。服务器端也是一样,什么BUG也找不到,再说03下的客户端又正常,应该说明服务器端没有问题。

请高人指点指点!

上次的问题还没解决,这次又来一个顺便也把上次的问题贴上来吧,是关于remoting的,解决一个是一个吧,要不然我真的要疯了
http://topic.csdn.net/u/20081103/10/15cdabcd-8e8a-4d41-b70f-118e4121f063.html
...全文
250 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhy0611 2008-11-10
  • 打赏
  • 举报
回复
问题解决了,是因为粘包造成的。服务器端收到的数据虽然做了粘包处理,但还是有漏洞啊。

最后只能牺牲一些效率,让客户端慢点上传数据了,不过还好,牺牲的部分是完全可以接受的,总算是解决了两个问题其中的一个了
yhy0611 2008-11-07
  • 打赏
  • 举报
回复
这个不是remoting 是socket的

tmxk2002 谢谢您的帮助和鼓励!
  • 打赏
  • 举报
回复
你这个用了remoting么?
我建议你采用排除的方法一步步来
你找台xp机器,写一个console的测试程序,用你现在序列化数据的那段代码以及服务器端的反序列化代码,然后用你出错时测试的数据,来做一个测试,看是否有问题。如果没有问题,那就把序列化后的数据保存下来,拿到服务器上再做反序列化,看是否有问题。如果都没问题,那就把你通讯的代码拿出来,在不做序列化的情况下,进行测试。
我相信bug的出现总归有原因的,所以不要猜测,通过测试,一点点排除掉可能的原因。应该能找的到的。
yhy0611 2008-11-07
  • 打赏
  • 举报
回复
应该跟防火墙没有关系,因为客户端(XP)是在向服务器端(03)发送数据时,服务器收到的数据包经常不能正确的返序列化。而不是服务器端发送数据客户端收不到。

我现在怀疑两点,第一,XP在序列化类的时候就出现错误,导致数据包内容跟本不正确,第二,就是XP向服务器发送数据时,把包弄丢或者坏掉了,因为在03系统下的客户端从没出过这样的问题。但我怀疑的问题又没有根据,只是我个人想法而已,所以也不知道从何处下手来解决。
  • 打赏
  • 举报
回复
xp开了防火墙的问题?
yhy0611 2008-11-07
  • 打赏
  • 举报
回复
补充一下,报错的地方是服务器端,而客户端正常

110,586

社区成员

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

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

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