[英]TCP Client/Server communication only sends first message?
我在java中設置一個簡單的TCP客戶端服務器交互。
服務器是用Java編寫的桌面客戶端:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
class TCPServer
{
public static int PORT_NUMBER = 6129;
public static void main(String argv[]) throws Exception
{
String clientMessage;
ServerSocket welcomeSocket = new ServerSocket(PORT_NUMBER);
while (true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientMessage = inFromClient.readLine();
System.out.println("Received: " + clientMessage);
outToClient.writeBytes("I received this: "+ clientMessage +"\n");
}
}
}
客戶端是一個Android應用程序,通過TCP連接到服務器。 在客戶端我有一個方法sendMessage(String msg)
,它嘗試向服務器發送消息。
public static void sendMessage(String msg) throws IOException
{
if (mainSocket == null)
{
return;
}
if (!mainSocket.isConnected())
{
connectSocket();
}
PrintWriter output = new PrintWriter( mainSocket.getOutputStream());
output.println(msg);
output.flush();
System.out.println(msg);
}
問題是,服務器收到第一條消息,但任何后續消息都不會顯示。 當我關閉客戶端時,所有其他消息突然出現在服務器中。
這是服務器看到的:
Received: message 1
很長一段時間都沒有活動......
然后我關閉了客戶端
Received: message 2 message 3 message 4 message 5 etc..
我在sendMessage()方法中放了一個println,並且實時調用了方法本身。
每次發送消息時,您都需要在客戶端顯式close()
PrintWriter
。 當您完成讀取inFromClient
時,在服務器端也是如此,並且當您完成寫入outToClient
時再次。
另見這個基本示例 ,他們非常好地解釋了基本工作流程:
但是,基礎知識與此計划中的基本內容大致相同:
打開一個插座。
打開輸入流並將輸出流輸出到套接字。
根據服務器協議讀取和寫入流。
關閉溪流。
關閉插座。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.