現在,我正在嘗試編寫一個基於GUI的基於網絡連接的Java井字遊戲。它基本上在這一點上工作,但我有一個間歇性的錯誤,其中通過網絡連接發送的幾個字符在遊戲過程中丟失。一種情況下看起來像這樣,當println語句被添加到消息發送/讀取:最後幾個字符串通過套接字發送有時在Java網絡程序中丟失
播放機1: 剛剛發送ROW 14 COLUMN 11 GAMEOVER真
玩家2: 剛收到ROW 14 COLUMN 11 GAMEOV
林相當肯定,當我通過網絡閱讀時發生錯誤。讀發生在自己的線程,與周圍的套接字的InputStream的包裹一個BufferedReader,看起來像這樣:
try {
int input;
while((input = dataIn.read()) != -1){
char msgChar = (char)input;
String message = msgChar + "";
while(dataIn.ready()){
msgChar = (char)dataIn.read();
message+= msgChar;
}
System.out.println("Just received " + message);
this.processMessage(message);
}
this.sock.close();
}
我的sendMessage方法是非常簡單的,(只是在圍繞插座的OutputStream的包裹DataOutputStream類寫入)所以我不認爲問題在那裏發生:
try {
dataOut.writeBytes(message);
System.out.println("Just sent " + message);
}
任何想法將不勝感激。謝謝!
是否有可能數據沒有完全刷新並且沒有被其他線程完整接收?你有證實嗎? –