저는 약간의 초보 프로그래머이기 때문에 이것은 매우 명백 할 수 있으며 대답을 간과 할 수 있습니다. 그러나 질문에.소켓 연결을 통해 여러 메시지를 보내는 것을 처리하는 방법은 무엇입니까?
두 가지 부분으로 구성된 프로그램 (이 예제보다 약간 복잡하지만 상황은 동일합니다)이 있습니다. 이 프로그램에는 클라이언트와 서버간에 여러 메시지가 실행됩니다. 서버 측에서 PrintWriter를 사용하여 클라이언트에게 메시지를 보내고, 클라이언트에는 보낸 메시지를 읽는 BufferedReader가 있습니다. 이 예제를 실행하면 두 줄이 출력됩니다. 첫 번째 메시지는 두 메시지이고 두 번째 메시지는 NULL입니다. 내가 궁금해하는 점은 두 번째 메시지가 준비되기 전까지 기본적으로 서버를 중지 할 수있는 방법이 있는지, 두 번째 메시지를 보내기 전에 클라이언트 측에서 처리 할 수있는 방법이 있는지 궁금합니다.
Thread.Sleep을 사용하지 않기를 바란다. Client가 준비가 될 때까지 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을 사용하지 않고 서버를 ""절전 "으로 만들고 싶습니까? –