Я использую многопоточный сервер, который обрабатывает подключение нескольких клиентов. Взаимодействие сервер-клиент работает без проблем, когда клиенты подключаются с использованием адреса «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) {
}
}
}