Ошибка тайм-аута соединения java.net.SocketException - PullRequest
1 голос
/ 03 августа 2010

Ошибка ниже, когда я пытаюсь подключиться к TCP-серверу.Мои программы пытаются открыть около 300-400 соединений, используя разные потоки, и это происходит во время 250-го потока.Каждый поток использует свое собственное соединение для отправки и получения данных.

java.net.SocketException: Connection timed out:could be due to invalid address
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:372)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:233)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:220)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)

Вот мой код, который используется потоком для получения сокета.количество соединений, которые TCP-сервер может иметь одновременно?Если нет, как решить этот тип проблем?

Ответы [ 2 ]

5 голосов
/ 03 августа 2010

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

Если это всегда происходит с 250-м соединением, возможно, сервер настроен на прием только 250 соединений. Кто-то должен отключиться, чтобы вы могли подключиться. Или вы можете увеличить время ожидания; вместо создания такого сокета создайте сокет с пустым конструктором, а затем используйте метод connect ():

Socket s = new Socket(); s.connect(new InetSocketAddress(my_hostName, my_port), 90000);

Время ожидания соединения по умолчанию составляет 30 секунд; Приведенный выше код ожидает 90 секунд для подключения, а затем выдает исключение, если соединение не может быть установлено.

Вы также можете установить меньшее время ожидания соединения и сделать что-то еще, когда поймаете это исключение ...

0 голосов
/ 04 августа 2010

Почему все соединения?Это тестовая программа?В этом случае имейте в виду, что открытие большого количества подключений от одного клиента приводит к нагрузке на клиента таким образом, который не выполняется в реальных системах с большим количеством различных клиентских хостов, поэтому результаты тестирования для такого типа клиентов не все так достоверны,Возможно, у вас не хватает клиентских портов или какого-либо другого клиентского ресурса.

Если это не тестовая программа, тот же вопрос.Почему все связи?Вам лучше запустить пул соединений и повторно использовать гораздо меньшее количество соединений поочередно.В конце концов, сеть имеет столько пропускной способности;деление на 400 не очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...