Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиентские сокеты, Java Core / 10 сообщений из 10, страница 1 из 1
09.10.2013, 14:47:36
    #38421622
trueCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
Как работать нескольким потокам с одним портом? (клиентские сокеты)
Соответственно всплыли вопросы.
Можно ли создать несколько клиентских сокетов на один порт? (заметил: при отключении одного сокета, отключаются и другие сокеты)
Это вариант: на каждый поток по одному сокету, но при этом все сокеты будут иметь общий порт?

Т.е. другими словами: несколько клиентских сокетов на один порт в одном приложении.
...
Рейтинг: 0 / 0
09.10.2013, 14:49:41
    #38421628
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
Зачем вам это надо?
...
Рейтинг: 0 / 0
09.10.2013, 14:51:50
    #38421633
trueCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
нужно несколько конкурирующих потоков, занимающихся отправкой данных на сервер, на один порт
придётся объявлять статическую переменную socket и объявлять методы, занимающиеся отправкой/ приёмом synchronize?
или можно иметь несколько сокетов на один порт и они будут threadsave (1 поток - 1 клиентский сокет)?
...
Рейтинг: 0 / 0
09.10.2013, 14:53:20
    #38421636
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
Из-за недостатка понимания у вас путаница в вопросе.
При соединении используется два порта. Один на сервере, второй на клиенте. Хотя № клиентского вы можете и не знать. Предполагаю что все вопросы подразумевают порт на сервере.

trueCoderКак работать нескольким потокам с одним портом? (клиентские сокеты)
Каждому потоку по своему клиентскому сокету. Сервер их тогда разделяет как разных клиентов.
Работать из разных потоков с одним клиентским сокетом небезопасно, если не синхронизировать к нему доступ полностью.

trueCoderМожно ли создать несколько клиентских сокетов на один порт?
На один серверный порт? Конечно, можно. Это ни чем не отличается от множества клиентов, подключенных к одному серверу.

trueCoder (заметил: при отключении одного сокета, отключаются и другие сокеты)

Пример кода.

trueCoderЭто вариант: на каждый поток по одному сокету, но при этом все сокеты будут иметь общий порт?

Порт на сервере один и тот же. Порт на клиенте разный у каждого клиентского сокета.

trueCoderТ.е. другими словами: несколько клиентских сокетов на один порт в одном приложении.
Да я и с первого раза понял. Повторять не обязательно. Вопрос какой?
...
Рейтинг: 0 / 0
09.10.2013, 14:54:59
    #38421641
trueCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
Blazkowicz, спасибо большое за ответ, я так понял сервер занимается переброской портов во время вызова метода accept.
...
Рейтинг: 0 / 0
09.10.2013, 14:57:34
    #38421646
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
trueCoderнужно несколько конкурирующих потоков, занимающихся отправкой данных на сервер, на один порт
Таки один серверный порт.

trueCoderпридётся объявлять статическую переменную socket и объявлять методы, занимающиеся отправкой/ приёмом synchronize?

В общем случае, этого недостаточно. Сокеты обмениваются с сервером отдельными пакетами. synchronized позволит обезопасить отправку\получение пакетов, так чтобы они не пересекались. Но он не обезопасит вас от нарушения порядка отправки\получения пакетов. Если протоколу всё равно на порядок пакетов, то можно и блокировкой обойтись. Если порядок пакетов важен как и отклики сервера, то нужно будет потоком окупировать работу с сокетом на целую сессию обмена данными. Что как бы может нивелировать всю многопоточность.

trueCoderили можно иметь несколько сокетов на один порт и они будут threadsave (1 поток - 1 клиентский сокет)?
Да. Это, скорее всего, оптимальный вариант.
...
Рейтинг: 0 / 0
09.10.2013, 14:59:45
    #38421651
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
trueCoderBlazkowicz, спасибо большое за ответ, я так понял сервер занимается переброской портов во время вызова метода accept.
Вызов серверного сокета происходит с некого клиентского порта. То есть со стороны сервера каждый клиент это тоже ip плюс port.
Поэтому два клиентских сокета открываются на 2х разных портах. И для сервера
127.0.0.1:51000 и 127.0.0.1:51001 это два разных адреса и два разных пира, даже если это один процесс в ОС.
...
Рейтинг: 0 / 0
09.10.2013, 15:14:36
    #38421683
trueCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
подытожу,
Т.е. так на клиенте без проблем можно:
Socket socket1 = new Socket("localhost", 210), socket2 = new Socket("localhost", 210);
и они могут одновременно отправлять данные на сервер.
...
Рейтинг: 0 / 0
09.10.2013, 15:17:27
    #38421690
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
trueCoderподытожу,
Т.е. так на клиенте без проблем можно:
Socket socket1 = new Socket("localhost", 210), socket2 = new Socket("localhost", 210);
и они могут одновременно отправлять данные на сервер.
Конечно.
...
Рейтинг: 0 / 0
09.10.2013, 15:19:41
    #38421697
trueCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Клиентские сокеты, Java Core
круто, спасибо огромное
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиентские сокеты, Java Core / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]