2016-12-04 3 views
0

Код, который работал мне некоторое время на разных платформах, начал внезапно сбой, в коде были изменены, но не в области, связанной с этим местом.socketChannel throws IOException с разрешением отказано

Строка кода, который бросает исключения есть:

(SocketChannel) selectionKey.channel()).finishConnect() 

И бросает:

java.net.SocketException: Разрешение отказано: никакой дополнительной информации

, что может быть проблема?

Некоторых логов, которые могли бы показать больше информации, это тестовый код:

2016-12-04 22: 50: 10585 [главный] DEBUG Socket - Socket-Клиент-1-1
зарегистрируйтесь чтобы подключиться к адресу: 0.0.0.0/0.0.0.0:8080
2016-12-04 22: 50: 10,585 [main] DEBUG SocketSelector - Регистрация ключей: OP_CONNECT (для Socket-Client-1-1)
2016-12-04 22: 50: 10,595 [основной] DEBUG SocketSelector - Зарегистрировано: OP_CONNECT> 2016-12-04 22: 50: 10,595 [NetworkThread] DEBUG SocketSelector -Выбранные ключи
для канала (java.nio.channels.SocketChannel [соединение рассматриваемой дистанционного = 0.0.0.0/0.0.0.0: 8080])

+0

Вы вызывали 'connect()' на этом канале? Вы ранее называли 'finishConnect()' на нем? Если да, то верно ли это? – EJP

+0

Да, я вызвал connect(), и он прошел успешно. finishConnect() выбросить это исключение с самого первого раза. – slashms

+0

Почему вы подключаетесь к 0.0.0.0? – EJP

ответ

1

Вопрос заключается в том, что вы пытаетесь подключиться к 0.0.0.0, который не является допустимым целевым адресом TCP. Это вызывает EPERM по причинам, описанным в человек connect.

Используйте 127.0.0.1 или соответствующий IP-адрес.

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