日期:2014-05-18  浏览次数:20819 次

帮同事转发一个问题!求解惑!
近期要解决一个问题,只能用C#来处理一下看看。
测试过程中发现一个奇怪的问题,如下:

功能实现:
用C#写的服务端程序,接收客户端发送的字符串,处理后返回客户端。

问题描述:
客户端发送字符串长度,如果是1024的整数倍,比如1024,2048,3072等,
服务端就无法接收数据,如果不是1024的倍数,都可以正常接收。
发送字符串都是可见的ascii字符,在测试的时候,直接用字符'0000....000'串来测试,因此不会出现乱码、字符集等因素困扰。

问题深究:
当时认为客户端是用java写的,才会导致问题,因此用C#特意写了一个客户端验证,发现问题依旧出现。
为了进一步验证,用java也写了一个服务端代码,用C#客户端连接,问题依旧。
再用java客户端代码连接java服务端代码,奇怪的事情发生了,没有问题。

测试环境在同一台电脑和非同一台电脑上,问题依旧一样出现。
地址采用127.0.0.1或者实际分配地址,问题依旧一样出现。

现象总结:
C#客户端 -》 C#服务端,处理1024倍数,异常
C#客户端 -》 JAVA服务端,处理1024倍数,异常
JAVA客户端-》C#服务端,处理1024倍数,异常
JAVA客户端-》JAVA服务端,处理1024倍数,正常


问题分析:
从上面情况分析,只能初步断定c#的通讯机制可能对1024长度倍数有什么特殊处理,导致不管是客户端还是服务端代码都无法正常处理。只要稍微修改一下发送字节长度,比如1023,1025,均可以正常运行。



当前方案:
为了保证程序运行,只能先判断需要发送的长度是否是1024倍数,如果是倍数,就额外增加一个字节,可以暂缓解决问题。但是却不是治根的办法,不知道各位用c#熟练的人,是否也碰到过这个问题?有可能只是一个设置问题,有可能需要变换一种实现方式,还望各位不吝赐教啊!

------解决方案--------------------
一定是你发送方法的问题。上代码。封包,解包的部分。