by Oracle 제공된 클라이언트/서버 자습서 예제를 약간의 조정을 시도하여 테스트하려고합니다.자바 클라이언트/서버 소켓 프로그램 - 서버가 클라이언트 요청에 응답하지 않음
이상적으로는 내 클라이언트의 BufferedReader stdIn
에 "print stuff"라고 쓰고 서버는이 문자열을 받으면 "클라이언트와 서버가 연결되었습니다!"라는 메시지를 인쇄합니다.
내 코드가 컴파일되어 연결에 성공한 것처럼 보입니다. 그러나, 내 서버는이 시점에서 아무 것도 인쇄하지 않습니다.
다음
내 클라이언트 코드 :public class myClient {
public static void main(String[] args) throws IOException {
String hostName = // my computer's local host name;
int portNumber = 4444;
try (
Socket clientSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
) {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
// Tell server to print line "Client and server have connected!";
String fromServer;
String fromUser;
while ((fromServer = in.readLine()) != null) {
if (fromServer.equals("End"))
break;
fromUser = stdIn.readLine();
if (fromUser != null)
out.println(fromUser);
}
} catch (UnknownHostException e) {
System.err.println("Don't know host!");
System.exit(1);
} catch (IOException e) {
System.err.println("IO Exception caught!");
System.exit(1);
}
}
}
는 IS 다음 내 서버 코드 :
public class myServer {
public static void main(String[] args) throws IOException {
int portNumber = 4444;
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
) {
// if receieved string is "print stuff", print "Client and server have connected!";
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.equals("End"))
break;
// try to echo input stream - no output!
out.println(inputLine);
if (inputLine.equals("print stuff"))
out.println("Client and server have connected!");
}
} catch(IOException e) {
System.err.println("Exception caught while trying to listen to port!");
}
}
}
서버가 클라이언트에서 콘솔로 수신하는 모든 행을 인쇄하십시오. 이렇게하면 디버깅이 훨씬 쉬워집니다. – ruediste
@ruediste 왜 내가 이것을 생각하지 않았는지 모르겠다. 그냥 시도해 보았다. (내 코드를 수정했다.) 아무 것도 프린트되지 않았다. – user2893128