Почему мое программное обеспечение блокируется при подключении сокета Java к ServerSocket? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую многопоточный сервер, который обрабатывает подключение нескольких клиентов. Взаимодействие сервер-клиент работает без проблем, когда клиенты подключаются с использованием адреса «localhost». Но при использовании IP-адреса сервера программное обеспечение перестает отвечать после создания сокета на стороне клиента, даже если клиент работает на главном компьютере.

СТОРОНА КЛИЕНТА:

System.out.println("Connecting to server " + ip + ":" + port + " ... ");
    if(socket == null || socket.isClosed()) {
        try {
            System.out.println("Socket is closed. Creating new socket.");
            socket = new Socket(InetAddress.getByName(ip), port); // This is the point where the client gets stuck when using an IP-address. Using "localhost" works fine.
            System.out.println("Created new socket");
            try {
                System.out.println("Attempting to create new streams");
                oos = new ObjectOutputStream(socket.getOutputStream());
                ois = new ObjectInputStream(socket.getInputStream());
                System.out.println("Created new streams");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.print("Could not connect socket streams");
                disconnect();
                return false;
            }
            System.out.print("Successfully connected to server...");
            start();
            return true;
        } catch (Exception e) {
            System.out.print("Cannot connect to server");
            e.printStackTrace();
            return false;
        }
    }

СТОРОНА СЕРВЕРА:

    public Server(int port, ServerController controller) throws IOException {

    this.controller = controller;
    try {
        serversocket = new ServerSocket(port);
        server.start();
    } catch (IllegalArgumentException e) {}

    this.port = serversocket.getLocalPort();
}

public void run() {
    System.out.println("MessengerServer running, port " + serversocket.getLocalPort());
    while(!serversocket.isClosed()) {
        try  {
            Socket socket = serversocket.accept();
            tempClient = new ClientHandler(socket, controller);
            clients.add(tempClient);
        } catch(IOException e) { 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...