我正在开发一个在服务器和客户端应用程序之间使用java套接字的应用程序。我需要通过这些套接字将大小为64k的文件从客户端发送到服务器。当我在本地运行所有系统(包括服务器和客户端)时,一切正常,但是当我在不同的计算机上运行服务器和客户端时,它会失败。通过套接字传输64k大小的文件失败
我正在使用JSON处理文件内容,所以在服务器中抛出的异常是:“net.sf.json.util.JSONTokener.syntaxError”。但问题不在于JSON,而在于文件的大小。当我发送大小小于8k的文件时,一切正常,但更大的大小会截断发送的信息,因此当服务器尝试解释截断的收到信息时,会引发JSONTokener.syntaxError。
我定义的64K套接字缓冲区如下(我使用NIO API):
SocketChannel sc;
private static final int BUFFER _SIZE = (int)Math.pow(2, 16);
.....
sc.socket().setReceiveBufferSize( BUFFER_SIZE);
sc.socket().setSendBufferSize(BUFFER_SIZE);
什么我需要做的,当我在一个偏僻的模式下运行我的系统,以扩大网络的封装尺寸?你有什么想法是哪个问题? 非常感谢您提前。
奥斯卡
听起来像您的阅读代码可能已损坏。不要试图依赖单个数据包中的所有内容,这可能是目前你所希望的......如果这是TCP,它就是一个* stream *协议。 – 2012-07-20 17:59:31