Java ConnectException: соединение отклоненоJAVA

Программисты JAVA общаются здесь
Anonymous
Java ConnectException: соединение отклонено

Сообщение Anonymous »

Недавно я начал проект по созданию игры «Отелло» с командной строкой. Для игры нужен 1 сервер и 2 клиента. Я закончил разработку игровой части и перешел к сетевой части (в которой я новичок).
Сначала я попробовал запустить и клиент, и сервер на своем компьютере, и все прошло отлично. Но когда я развернул программы на соответствующих виртуальных машинах, я получил это сообщение об ошибке при запуске клиента (сервер работал):
Exeption in thread "main" java.net.ConnectException: Connection refused
[...]
at contactServ.startConnection(contactServ.java:10)
at Main.main(Main.java:9)

Все виртуальные машины (размещенные на Oracle VirtualBox) подключены через сеть NAT с DHCP для присвоения IP-адресов. Сервер работает на машине с Debian 12, а клиент работает на машине Mint.
Я использовал Telnet, чтобы убедиться, что сервер доступен по этому конкретному порту, и так оно и было. Он даже вёл себя так, как будто получал данные от клиента, когда я использовал Telnet. Вот почему я уверен, что сервер прослушивает этот порт.
Вот класс Main:
import java.io.IOException;
import java.util.Scanner;

public class Main {
public static String input;
public static conctactServ link = new conctactServ();

public static void main(String[] args) throws IOException {
link.startConnection("10.0.2.4", 8880);
scannerLoop();
}

public static void scannerLoop() throws IOException {
Scanner scanneur = new Scanner(System.in);
input = scanneur.nextLine();
link.sendMessage(input);
scannerLoop();
}
}

Вот класс contactServ:
import java.net.*;
import java.io.*;

public class conctactServ {
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;

public void startConnection(String ip, int port) throws IOException {
clientSocket = new Socket(ip, port);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}

public String sendMessage(String msg) throws IOException {
out.println(msg);
String resp = in.readLine();
return resp;
}

public void stopConnection() throws IOException {
in.close();
out.close();
clientSocket.close();
}
}

Но на всякий случай вот класс сервера:
import java.net.*;
import java.io.*;

public class ConnectionServ {
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;

public static void createInstance() throws IOException {
ConnectionServ serveur = new ConnectionServ();
serveur.start(8880);
}

public void start(int port) throws IOException {
serverSocket = new ServerSocket(port);
clientSocket = serverSocket.accept();
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine = in.readLine();
if (inputLine.equalsIgnoreCase("stop")) {
System.out.println("bien joué!");
out.println("bien joué client!");
}
}

public void stop() throws IOException {
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
}

И на всякий случай, вот класс Main (сокращенно):
public class Main {

public static String grid = "........\n........\n........\n...xo...\n...ox...\n........\n........\n........\n";

public static void main(String[] args) throws IOException {

putPawn(4, 6, 'x');
printGrid();
ConnectionServ.createInstance();
}

Вернуться в «JAVA»