Я немного начинающий программист, так что это возможно, это совершенно очевидно, и я не замечаю ответа. Но на вопрос.Как обрабатывать отправку нескольких сообщений через соединение сокета?
У меня есть программа с двумя частями (ее немного сложнее, чем этот пример, но ситуация такая же). Программа имеет несколько сообщений, запущенных между клиентом и сервером. У меня есть PrintWriter на стороне сервера, чтобы отправлять сообщения клиенту, а на клиенте у меня есть BufferedReader для чтения отправленных сообщений. Когда этот пример запущен, я получаю две строки в качестве вывода. Первое сообщение - это оба сообщения, а второе - NULL. Мне интересно, есть ли способ остановить сервер до тех пор, пока я не буду готов ко второму сообщению, чтобы я мог что-то сделать на стороне клиента перед отправкой второго сообщения.
Я надеюсь не использовать Thread.Sleep, поскольку я предпочел бы, чтобы Сервер подождал, пока Клиент не заявит, что он готов.
Это клиент:
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
Итак, вы хотите сделать свой сервер '' SLEEP "' без использования 'Thread.Sleep'? –