我是一個初學者程序員,所以這可能很明顯,我忽略了答案。但在這個問題上。如何處理通過套接字連接發送多個消息?
我有一個兩部分的程序(它比這個例子稍微複雜一點,但情況是相同的)。該程序在客戶端和服務器之間觸發了多條消息。我在服務器端有一個PrintWriter向客戶端發送消息,而在客戶端,我有一個BufferedReader來讀取發送的消息。 當這個例子運行時,我給出了兩行輸出。第一條消息是兩條消息,第二條消息是NULL。我想知道的是,如果有辦法基本停止服務器,直到準備好第二條消息,這樣我才能在發送第二條消息之前在客戶端執行一些操作。
我希望不要使用Thread.Sleep,因爲我寧願Server等待,直到客戶端說它已準備就緒。
這是客戶:
public class Client{
public void run(){
Socket socket = null;
InputStream in = null;
BufferedReader reader = null;
try{
socket = new socket("LocalHost",1234);
in = socket.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
}
String messageFromServer = "";
try{
messageFromServer=reader.readLine();
}
System.out.println(messageFromServer);
String messageFromServer = "";
try{
messageFromServer=reader.readLine();
}
System.out.println(messagefromServer);
//close everything
}
}
這是服務器:
public class Server{
public void run(){
ServerSocket server = null;
Socket client = null;
try{
server = new ServerSocket(1234);
client = server.accept();
}
PrintWriter writer = null;
OutputStream out = null;
try{
out = client.getOutputStream();
writer = new PrintWriter(out, true);
}
writer.write("Hi I'm a server");
//do some stuff that takes some time, user input, etc. etc.
writer.write("I'm still a server");
//close everything
}
謝謝:)
您的客戶端可以發送一個ACK消息,服務器線程將等待它發送另一個消息之前。 – vidit
您可以使用池機制,允許客戶端輪詢服務器 – MadProgrammer
因此,您希望在不使用Thread.Sleep的情況下使服務器成爲SLEEP? –