Я пытаюсь создать приложение чата на Java для своего сетевого класса. На данный момент я застрял, пытаясь подключиться к кому-то за другим маршрутизатором. Прямо сейчас у меня есть проект: у меня есть клиентская программа и серверная программа. Клиентские программы сначала входят в серверную программу, которая регистрирует их IP-адрес и порт в базе данных, а затем сервер возвращает им список их друзей с их IP-адресами и портами. Затем клиент закрывает соединение с сервером и пытается подключиться к другому клиенту, используя информацию, которую сервер отправил обратно. Пока моя программа работает только с подключением к серверу и получением IP-адреса и порта друзей, но когда я использую эти значения для подключения к другому клиенту, я не могу подключиться.
socket = new Socket();
socket.setReuseAddress(true);
socket.setKeepAlive(true);
socket.setSoLinger(true, 10);
socket.bind(new InetSocketAddress(Port));
socket.connect(new InetSocketAddress(host, SERVER_PORT));
reusePort = socket.getLocalPort();
Выше фрагмент кода Java, используемый для подключения к серверу, ниже - то, что я делаю на стороне клиента.
ss = new ServerSocket(reusePort);
Итак, теперь технически я слушаю тот же порт, который использовал для подключения к серверу, с которого вошел в систему и который может быть получен другим клиентом и находится в таблице NAT с моим IP-адресом и портом. Я не уверен, что мне не хватает, есть ли какой-то протокол или что-то, что я должен сделать. Я посмотрел на пробивку отверстий TCP и UDP, но я не уверен, как это на самом деле выполняется или как это реализовать.
Мы ценим любые предложения.