客戶端和服務器之間可以進行成功的對話。但是,這隻有在客戶端和服務器之間發送一條消息的情況下。Java套接字客戶端/服務器對一次只能發送一條消息
實施例(工程):
Client: Hello
Server: helloo
Client: what time is it
Server: Let me get that for you
實施例(不工作):
Client: Hello
Server: helloo
Server: *How are you today*
Server: *test message*
Client: Yes
星號之間的消息不在客戶端,直到所述客戶端發送呈現2個消息。根據我的理解,它似乎像一個網絡消息系統一樣工作,其中服務器發送的消息數量必須等於客戶端發送的消息數n + -1,以顯示所有消息。
客戶端代碼:
try {
Socket client_socket= new Socket(hostname,port_number);
PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
String fromUser,fromServer;
while ((fromServer=input.readLine())!=null) {
System.out.println("Server: "+fromServer);
if (fromServer.equals("Quit")) {
break;
}
fromUser=stdIn.readLine();
if (fromUser!=null) {
System.out.println("Client: "+fromUser);
output.println(fromUser);
}
}
}
服務器端代碼:
try {
ServerSocket server_socket=new ServerSocket(port_number);
Socket client_socket= server_socket.accept();
PrintWriter output = new PrintWriter(client_socket.getOutputStream(),true);
BufferedReader input = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
output.println("Established");
String fromUser, fromServer;
while ((fromUser=input.readLine())!=null) {
System.out.println("Client: "+fromUser);
if (fromUser.equals("Quit")) {
break;
}
fromServer=stdIn.readLine();
if (fromServer!=null) {
System.out.println("Server: "+fromServer);
output.println(fromServer);
}
}
}
看代碼,我可以明白爲什麼會發生這種事,它是因爲While
循環之後的SOP初始化停止等待1行輸入的代碼,然後等待發送自己的句子,然後再接收另一個。我試圖將這些放在if語句中,但是這完全沒有任何交流。
我似乎無法弄清楚如何解決這個問題。
如果這需要線程,有沒有另一種方式? (我不太熟悉線程)
您需要花更多時間學習TCP套接字如何工作。你的問題有無數的例子 – redFIVE
我經歷的許多例子都有隻有一條消息發送的問題。隨後的消息只會在套接字關閉時顯示。另外,我也嘗試尋找更多的例子,並閱讀它們,似乎無法找到很多(一些進入線程) – user2883071
你還沒有看夠硬,這不是一些獨特的隱晦的用例 – redFIVE