我正在開發一個在服務器和客戶端應用程序之間使用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