>  기사  >  Java  >  내 Java 서버가 클라이언트 요청에 응답하지 못하는 이유는 무엇입니까?

내 Java 서버가 클라이언트 요청에 응답하지 못하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-10 05:41:02544검색

Why Does My Java Server Fail to Respond to Client Requests?

Java 소켓 통신에서 서버가 클라이언트에 응답하지 못함

Java에서 클라이언트와 서버 간에 소켓 통신을 설정하려고 하면 오류가 발생합니다. 서버가 클라이언트에 응답하지 못하는 상황이 발생할 수 있습니다. 이는 여러 가지 이유 때문일 수 있으며 이 기사에서 살펴보겠습니다.

클라이언트-서버 소켓 통신

통신을 시작하기 위해 서버는 일반적으로 ServerSocket을 생성하고 특정 포트에서 들어오는 연결을 수신합니다. 클라이언트가 연결되면 서버는 연결을 설정하기 위해 Socket 객체를 생성합니다. 클라이언트는 또한 서버와의 연결을 설정하기 위해 소켓 개체를 생성합니다.

서버 코드

public class Server {

    public static void main(String[] args) throws IOException {
        ServerSocket ss = null;
        Socket s = null;
        try {
            // Create a server socket and listen on port 34000
            ss = new ServerSocket(34000);

            // Accept an incoming connection from a client
            s = ss.accept();

            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(s.getOutputStream());

            // Continuously read messages from the client
            while (true) {
                String string = in.readLine();
                if (string != null) {
                    System.out.println("br: " + string);

                    // Respond to the "end" message from the client
                    if (string.equals("end")) {
                        out.write("to end");
                        out.flush();
                        out.close();
                        System.out.println("end");
                        // break;
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close the socket connections
            s.close();
            ss.close();
        }
    }
}

클라이언트 코드

public class Client {

    public static void main(String[] args) {
        Socket socket = null;
        try {
            // Create a client socket and connect to the server on port 34000
            socket = new Socket("localhost", 34000);
            
            // Create input and output streams for communication
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());

            // Send a message to the server
            String string = "end";
            out.write(string);
            out.flush();

            // Listen for the server's response
            while (true) {
                String string2 = in.readLine();
                if (string2.equals("to end")) {
                    System.out.println("yes sir");
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Close the socket connection
            socket.close();
        }
    }
}

문제 해결

서버가 클라이언트에 응답하지 못하는 경우 다음과 같은 몇 가지 이유가 있을 수 있습니다.

  • 줄바꿈 문자 누락 : OutputStreamWriter를 사용하여 메시지를 작성할 때 메시지 끝에 개행 문자("rn")를 추가해야 합니다. 이는 메시지의 끝을 원격 측에 알립니다. 제공된 코드에서 "end" 메시지는 개행 문자 없이 전송되므로 서버가 이를 무시할 수 있습니다.

해결책: "rn"을 코드에 추가하세요.

string = "end\r\n";
out.write(string);
out.flush();
out.write("to end\r\n");
out.flush();
  • 네트워크 연결 변동: 클라이언트와 서버가 모두 다른 컴퓨터에서 실행 중인 경우, 이들 간의 네트워크 연결이 불안정하거나 중단되어 통신이 실패할 수 있습니다.

해결 방법: 네트워크 연결을 확인하고 차단할 수 있는 방화벽이나 라우터 설정이 있는지 확인하세요. 들어오거나 나가는 연결.

  • 잘못된 포트 구성: 클라이언트와 서버 모두 통신에 동일한 포트 번호를 사용하고 있는지 확인하세요. 제공된 코드에서 서버는 포트 34000에서 수신 대기하므로 클라이언트도 해당 포트에 연결해야 합니다.

해결책: 클라이언트와 서버 모두에서 포트 번호를 조정하세요. 필요한 경우 코드를 입력하세요.

위 내용은 내 Java 서버가 클라이언트 요청에 응답하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.