我目前正試圖編寫我的第一個客戶端>服務器系統,以通過網絡來回傳輸包含字符串的數據包。不過,我遇到了以下問題: 客戶端向服務器發送消息,服務器收到消息,處理消息,然後假設向客戶端發送回覆,但客戶端永遠不會收到此消息並掛起等待服務器的響應。下面是代碼:客戶端不會收到來自服務器的DataOutputStream的輸出
SERVER:
public static void handlePackets() throws Exception {
String clientSentence;
String returnToClient;
ServerSocket welcomeSocket = new ServerSocket(1337);
System.out.println("Packet receiver initialized!");
while (run) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("Received Packet: " + clientSentence);
System.out.println("Compiling return to client.");
returnToClient = "";
if (clientSentence.startsWith("Handshake-")) {
returnToClient = handleHandShake(clientSentence);
}
outToClient.writeBytes(returnToClient);
System.out.println("Sent client response " + returnToClient);
}
welcomeSocket.close();
}
客戶:
public static String sendTCP(String host, String content) {
try {
System.out.println("Packet sender sending TCP packet " + content);
String serverResponse;
Socket clientSocket = new Socket(host, 1337);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(content + '\n');
System.out.println("Send data to sever. Awaiting response.");
serverResponse = inFromServer.readLine();
clientSocket.close();
System.out.println("Server response received " + serverResponse + " result was returned to caller.");
return serverResponse;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
你有沒有試過在你的'DataOutputStream'上調用'flush()'?另外,爲什麼使用'DataOutputStream'呢?看起來這裏並沒有正確的課程。 – aroth
@aroth flush()對'DataOutputStream'什麼都不做,除非在它下面有一個'BufferedOutputStream',在這種情況下並不存在。 – EJP
@EJP當然這意味着它應該永遠不需要在'SocketOutputStream'上調用'flush()'? – aroth