我正在創建一個Java客戶端程序,它向服務器發送一個命令,服務器發回一個確認和一個響應字符串。TCP/IP客戶端:從服務器讀取多個輸入流的最佳方式
的響應被以這種方式發送回
客戶端 - >服務器:cmd_string
服務器 - >客戶端:ack_msg(06)
服務器 - >客戶端:response_msg
當我嘗試讀取輸入時,要麼只能讀取只讀取帶有一個輸入流的確認消息
我的客戶端程序能夠以某種方式讀取消息(hacky方法)。要閱讀輸入,我必須使用Bufferedreader閱讀ack msg。
- 在只能夠讀取ack_msg不是以下MSG
- DataInputStream類代碼此緩衝讀取器是需要的讀取響應味精。
- 如果我跳過第1步,只是使用Datainputstream,我無法讀取完整的消息。
Client.java
try {
Socket clientSocket = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);// ip,port
System.out.println(" client Socket created .. ");
PrintWriter outToServer = new PrintWriter(clientSocket.getOutputStream(), true);
String ToServer = command;
outToServer.println(ToServer);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//
// while (!in.ready()) {
// }
System.out.println(in.read()); // Read one line and output it
// ===
byte[] messageByte = new byte[1000];//assuming msg size -need to know eact msg size ?
boolean end = false;
String dataString = "";
int bytesRead = 0;
try {
DataInputStream in1 = new DataInputStream(clientSocket.getInputStream());
//
while (!end) {
bytesRead = in1.read(messageByte);
dataString += new String(messageByte, 0, bytesRead);
if (dataString.length() > 0) {
end = true;
}
}
System.out.println("MESSAGE: " + dataString);
} catch (Exception e) {
e.printStackTrace();
}
// ===
in.close();
clientSocket.close();
System.out.print("connection closed");
} catch (Exception e) {
System.out.print("Whoops! It didn't work!\n");
e.printStackTrace();
}
輸出
客戶端套接字創建..
響應:6
MESSAGE:³CO³0³Œ
連不上
當我跳過步驟1
客戶端的Socket創建..
留言: -
連接關閉
我如何編寫代碼讀取所有來自 服務器的輸入(確認msg &響應消息&它還應該檢查 數據的大小並據此讀取)?
簡稱How to read all of Inputstream in Server Socket JAVA
由於
我只是從這個答案中刪除(3)。這真的不行。您無法預測服務器的延遲或服務時間。 – EJP