簡體   English   中英

Java-客戶端收到來自in.readLine()的空響應

[英]Java - client receiving a null response from in.readLine()

我在寫紙牌游戲方面做得很長,這使得人們可以在線對戰。 在測試過程中,我注意到客戶偶爾會收到對郵件的空響應,我不知道為什么。

客戶代碼:

InetAddress address = InetAddress.getByName(SERVER_IP);
Socket socket = new Socket(address, SERVER_PORT_NUMBER);
socket.setSoTimeout(20000);

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.write(messageString + "\n");
out.flush();

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
responseString = in.readLine();

//new handling I've added since getting NullPointers later on
if (responseString == null)
{
    retryOrStackTrace(new Throwable("NULL responseString"));
}

服務器代碼:

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
message = in.readLine();
String response = getResponseForMessage(message);

//Sometimes getting a null response client-side
if (response == null)
{
    Debug.stackTraceServerWithReason("About to send NULL response for message " + message);
}

BufferedOutputStream os = new BufferedOutputStream(clientSocket.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write(response + "\n");
osw.flush();
osw.close();

自從我添加以來,服務器端堆棧跟蹤就沒有出現過,因此服務器構建響應絕對不是問題。

由於這是多么的斷斷續續,所以我想將其歸結為連通性,但是當我在同一盒子上運行服務器並將客戶端指向本地主機時,就已經有了它,所以我不確定。 我還希望ConnectException / SocketException / SocketTimeoutException可以解決任何連接問題,在使用retryOrStackTrace()在放棄之前重新發送消息一定次數之前,客戶端已經捕獲了所有連接問題。

我可以保留原樣,並以相同的方式處理null響應,但是感覺很懶。 我只是不知道從哪里開始找出這里的根本問題。

回顧這一點,我認為問題在於通過在Eclipse中進行構建來實現斷點/熱交換代碼。 我只在通過Eclipse運行時才看到此問題-通過JAR運行可以正常工作。 D'哦!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM