2013-04-30 3 views
2

Я работал над небольшим проектом 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 - константа перечисления, которая представляет собой разъединение.

Если кто-то знает, что я делаю не так, или что я просто не делаю, как и все остальное, пожалуйста, дайте мне знать, я буду очень благодарен.

+0

Брандмауэр? Права доступа? Mac OS может активно отказываться от соединений на поставляемом порту. – MadProgrammer

+0

Я попробовал это в Windows и получил ту же проблему. Я не думаю, что это проблема ОС. –

+0

Может быть проблема с брандмауэром. Вы пытаетесь подключиться из локальной сети или извне (из Интернета/VPN). – MadProgrammer

ответ

0

Я не эксперт на Mac, но на основе вывода lsof кажется, что ваша программа привязана только к адресу IPv6. Он отлично работает на localhost, но если вы попробуете публичный IP-адрес (и используете IPv4), это может стать источником вашей проблемы. Что касается номера порта, то в UNIX, таком как ОС, вам необходимо иметь root-доступ к пользовательским портам ниже 1024. В любом случае вам следует попытаться отключить IPv6 на вашем Mac и посмотреть, не исчезнет ли проблема.

Смежные вопросы