我用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服务端通信时,有长度上的问题,我不知道问题出在什么地方,因为我们单测都是正常的,
不知道有没有遇到此问题的其它朋友,请指教。

解决方案 »

  1.   

    解决如下:
    另外,我可能忘提一个重要的问题了,我的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的结果是怎么样的。
      

  2.   

    不知道跟这个有没关系......3.5.3  SO_RCVBUF选项
     设置该选项:public void setReceiveBufferSize(int size) throws SocketException
     读取该选项:public int getReceiveBufferSize() throws SocketException
    SO_RCVBUF 表示服务器端的用于接收数据的缓冲区的大小,以字节为单位。一般说来,传输大的连续的数据块(基于HTTP或FTP协议的数据传输)可以使用较大的缓冲区,这可以减少传输数据的次数,从而提高传输数据的效率。而对于交互式的通信(Telnet和网络游戏),则应该采用小的缓冲区,确保能及时把小批量的数据发送给对方。
    SO_RCVBUF的默认值与操作系统有关。例如,在Windows 2000中运行以下代码时,显示SO_RCVBUF的默认值为8192:ServerSocket serverSocket=new ServerSocket(8000);
    System.out.println(serverSocket.getReceiveBufferSize());无论在ServerSocket绑定到特定端口之前或之后,调用setReceiveBufferSize()方法都有效。例外情况下是如果要设置大于 64K的缓冲区,则必须在ServerSocket绑定到特定端口之前进行设置才有效。例如,以下代码把缓冲区设为128K:ServerSocket serverSocket=new ServerSocket();
    int size=serverSocket.getReceiveBufferSize();
    if(size<131072) serverSocket.setReceiveBufferSize(131072);  
    //把缓冲区的大小设为128K
    serverSocket.bind(new InetSocketAddress(8000)); 执行serverSocket.setReceiveBufferSize()方法,相当于对所有由serverSocket.accept()方法返回的Socket设置接收数据的缓冲区的大小。
      

  3.   

    不错!
    欢迎加入!
    ------------------------
    qq群 59011611
    深圳外包.J2EE群
    qq群 43652320
    在线程序员论坛