JAVA SOCKET服务端接收C客户端字节长度的问题

问题如下:
我用JAVA写的服务端,每收请求以线程响应,读取报文的代码如下:
DataInputStream dis=new DataInputStream(socket.getInputStream());
//缓冲区的大小
byte[] bt=new byte[MsgEnvironment.MAX_MESSAGE_LENGTH];//MsgEnvironment.MAX_MESSAGE_LENGTH为32000
dis.read(bt);
//处理接收到的报文,转换成字符串
String message=new String(bt).trim();

我用JAVA写的SOCKET客户端,发送超过8K的报文,能够正常接收,在本机以及其它机器都有测试,正常通过。
客户端用C给我发,也是TCP/IP给我发过来,超过4380,就只能够收到4380字节了,C端给本身编写的测试服务端发报文,也可以超过5K,能够正常收到。

现在的问题就是C客户端与JAVA服务端通信时,有长度上的问题,我不知道问题出在什么地方,因为我们单测都是正常的,
不知道有没有遇到此问题的其它朋友,请指教。

解决如下:
另外,我可能忘提一个重要的问题了,我的JAVA MS(MessageServer)在WINDOWS XP平台上运行,C客户端是在UNIX平台上运行的。
我们尝试了如下步骤:
1、我编写的JAVA CLIENT发超过8K的数据,MS(MessageServer)可以正常接写。
2、核心采用C客户端与C服务端发,C服务端可以正常接收超过8K的数据。
3、我的JAVA CLIENT与其C服务端发,对方C服务端可以接收超过8K的数据。
4、对方在WINDOWS平台下重新编译发送端,我的JAVA MS可以正常接收超过8K的数据。
5、对方通过WINDOWS平台往UNIX服务端发送超过8K的数据,可以正常接收。
现在唯一有问题的就是对方通过UNXI客户端往WINDOWS的MS服务端发数据了,我们开始怀疑WINDOWS与UNIX的底层的通信可能有问题了,因为通过上面的实验可以证明我们编写的服务端、客户端都没有问题。最后我将JAVA MS服务移到了LINUX平台上,对方再次通过UNIX发过来,终于可以接收超过8K的数据了。
 
总结:从上面的步骤可以看出,问题出在WINDOWS XP上面,没有尝试过WIN2003,不知道2003的结果是怎么样的。

本文出自:冯立彬的博客



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值