그래서 자바로 소켓이있는 서버와 클라이언트를 만들었습니다. 나는 소켓에서 읽기/쓰기로 서버를 얻으려고하지만, 클라이언트가 연결을 끊 만 읽Java - 클라이언트가 연결을 끊을 때까지 소켓이 읽히지 않습니까?
System.out.println("Server initialized");
clientSocket = server.accept();
System.out.println("Client connected");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
for(int loop = 0;loop<5;loop++){
out.write("Hello");
System.out.println(in.readLine());
} //end for
문제는 클라이언트가 연결되면, 그것이 말하는 한 다음 "클라이언트 연결"하지만 것입니다 for 루프를 통해 실행되지 않습니다. 그러나 클라이언트가 연결을 끊으면 서버는 for 루프를 실행하고 반환합니다.
null
null
null
null
null
여기서 내가 무엇을 놓치고 있습니까?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public ServerSocket server;
public Server(int port){
try {
server = new ServerSocket(port);
} catch (IOException e) {
System.out.println("Cannot bind to port: "+ port);
System.exit(-1);
}
} //end constructor
public void WaitForClient() throws IOException{
Socket clientSocket = null;
try {
System.out.println("Server initialized");
clientSocket = server.accept();
System.out.println("Client connected");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
for(int loop = 0;loop<5;loop++){
out.write("Hello");
System.out.println(in.readLine());
} //end for
} //end try
catch (IOException e) {
System.out.println("Accept failed");
System.exit(-1);
} //end catch
clientSocket.close();
server.close();
} //end method
} //end class
을 (내 주요 방법은 다른 클래스에서 호출됩니다.) 즉시 결과를 확인하려는 경우 서버에서 스트림을 플러시해야
어디 플러시를 추가? 내 for 루프에서? –
예,'out.write' 후 – michael667
글쎄, 지금은 읽기,하지만 여전히'null'을 반환합니다 : S –