Java - 客户端从in.readLine()接收空响应

时间:2014-07-23 19:53:43

标签: java null client bufferedreader

我在写一款允许人们互相玩牌的纸牌游戏方面还有很长的路要走。在测试期间,我注意到客户端偶尔会收到对其消息的空响应,我不知道为什么。

客户代码:

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();

自从我添加它以来,服务器端堆栈跟踪尚未出现,因此服务器构建响应肯定不是问题。

由于这是间歇性的,我想把它放到连接上,但我在同一个盒子上运行服务器并将客户端指向localhost时已经有了它,所以我不确定。我还期望ConnectException / SocketException / SocketTimeoutException涵盖任何连接问题,客户端在使用retryOrStackTrace()在放弃之前重新发送消息一定次数之前已经捕获了所有连接问题。

我可以保留原样并让null响应以相同的方式处理,但感觉很懒惰。我只是不知道从哪里开始弄清楚底层问题是什么。

1 个答案:

答案 0 :(得分:0)

回顾这一点,我认为问题在于通过在Eclipse中构建来破坏/热交换代码。我在Eclipse中运行时只看到过这个问题 - 通过JAR运行正常。 d'!哦