Я работал над небольшим проектом server/client, и я столкнулся с небольшой проблемой, которая мешает моему прогрессу.Connection отказался при попытке подключения с внешним IP-адресом
Я думаю, что я прибил ядро программы (клиент и сервер), и мне удалось соединить два с помощью localhost
, но когда я пытаюсь подключение через мой внешний IP я получаю исключение:
java.net.ConnectException: Connection refused
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
java.net.Socket.connect(Socket.java:529)
java.net.Socket.connect(Socket.java:478)
java.net.Socket.<init>(Socket.java:375)
java.net.Socket.<init>(Socket.java:218)
networking.Client.run(Client.java:183)
java.lang.Thread.run(Thread.java:680)
Первоначально Я попытался использовать порт 10, но обнаружил, что порты между 0 и 1023 не работают на Mac по какой-то причине, поэтому я выбрал порт за пределами этого диапазона. Соединение с localhost
сработало, но когда я попытался подключиться к внешнему IP-адресу (как обычный пользователь), я получил это исключение. Мои порты перенаправлены правильно и запущен sudo lsof -i tcp -nP
(netstat
для компьютеров Mac), который показывает, что на самом деле мой сервер фактически прослушивает правильный порт. Это заставляет меня думать, что проблема может быть с моим клиентом, но я действительно не знаю.
Вот sudo lsof -i tcp -nP
выхода из Terminal.app:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 35423 MeshulamSilk 41u IPv6 0xc949f3cdb29dfdcd 0t0 TCP *:63370 (LISTEN)
java 35423 MeshulamSilk 42u IPv6 0xc949f3cdbbf1b96d 0t0 TCP [::1]:63992->[::1]:63991 (TIME_WAIT)
Я знаю, что эти сообщения получить своего рода грязными, поэтому я загрузил код в Gist. Если кто-нибудь захочет, чтобы я добавил его сюда, дайте мне знать, и я это сделаю.
The code for both the server and client can be found here.
Некоторые вещи, чтобы отметить:
- MooConsole библиотека я написал, который предоставляет консоль для экспортируемых программ. Я использую его как на моем клиенте, так и на сервере для отображения текста.
- MooCommands - это еще одна из моих библиотек, которая представляет собой команду, которую вы можете запустить с консоли.
- SocketThread - класс, который обрабатывает новые соединения. Это позволяет серверу одновременно подключать несколько клиентов. Он распространяется
java.lang.Thread
. Я не думаю, что это вызывает проблему, поэтому я не включаю ее, но могу, если это необходимо. Operations.DISCONNECT
- константа перечисления, которая представляет собой разъединение.
Если кто-то знает, что я делаю не так, или что я просто не делаю, как и все остальное, пожалуйста, дайте мне знать, я буду очень благодарен.
Брандмауэр? Права доступа? Mac OS может активно отказываться от соединений на поставляемом порту. – MadProgrammer
Я попробовал это в Windows и получил ту же проблему. Я не думаю, что это проблема ОС. –
Может быть проблема с брандмауэром. Вы пытаетесь подключиться из локальной сети или извне (из Интернета/VPN). – MadProgrammer