|
|
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
Как работать нескольким потокам с одним портом? (клиентские сокеты) Соответственно всплыли вопросы. Можно ли создать несколько клиентских сокетов на один порт? (заметил: при отключении одного сокета, отключаются и другие сокеты) Это вариант: на каждый поток по одному сокету, но при этом все сокеты будут иметь общий порт? Т.е. другими словами: несколько клиентских сокетов на один порт в одном приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:47:36 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
Зачем вам это надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:49:41 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
нужно несколько конкурирующих потоков, занимающихся отправкой данных на сервер, на один порт придётся объявлять статическую переменную socket и объявлять методы, занимающиеся отправкой/ приёмом synchronize? или можно иметь несколько сокетов на один порт и они будут threadsave (1 поток - 1 клиентский сокет)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:51:50 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
Из-за недостатка понимания у вас путаница в вопросе. При соединении используется два порта. Один на сервере, второй на клиенте. Хотя № клиентского вы можете и не знать. Предполагаю что все вопросы подразумевают порт на сервере. trueCoderКак работать нескольким потокам с одним портом? (клиентские сокеты) Каждому потоку по своему клиентскому сокету. Сервер их тогда разделяет как разных клиентов. Работать из разных потоков с одним клиентским сокетом небезопасно, если не синхронизировать к нему доступ полностью. trueCoderМожно ли создать несколько клиентских сокетов на один порт? На один серверный порт? Конечно, можно. Это ни чем не отличается от множества клиентов, подключенных к одному серверу. trueCoder (заметил: при отключении одного сокета, отключаются и другие сокеты) Пример кода. trueCoderЭто вариант: на каждый поток по одному сокету, но при этом все сокеты будут иметь общий порт? Порт на сервере один и тот же. Порт на клиенте разный у каждого клиентского сокета. trueCoderТ.е. другими словами: несколько клиентских сокетов на один порт в одном приложении. Да я и с первого раза понял. Повторять не обязательно. Вопрос какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:53:20 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо большое за ответ, я так понял сервер занимается переброской портов во время вызова метода accept. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:54:59 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
trueCoderнужно несколько конкурирующих потоков, занимающихся отправкой данных на сервер, на один порт Таки один серверный порт. trueCoderпридётся объявлять статическую переменную socket и объявлять методы, занимающиеся отправкой/ приёмом synchronize? В общем случае, этого недостаточно. Сокеты обмениваются с сервером отдельными пакетами. synchronized позволит обезопасить отправку\получение пакетов, так чтобы они не пересекались. Но он не обезопасит вас от нарушения порядка отправки\получения пакетов. Если протоколу всё равно на порядок пакетов, то можно и блокировкой обойтись. Если порядок пакетов важен как и отклики сервера, то нужно будет потоком окупировать работу с сокетом на целую сессию обмена данными. Что как бы может нивелировать всю многопоточность. trueCoderили можно иметь несколько сокетов на один порт и они будут threadsave (1 поток - 1 клиентский сокет)? Да. Это, скорее всего, оптимальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:57:34 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
trueCoderBlazkowicz, спасибо большое за ответ, я так понял сервер занимается переброской портов во время вызова метода accept. Вызов серверного сокета происходит с некого клиентского порта. То есть со стороны сервера каждый клиент это тоже ip плюс port. Поэтому два клиентских сокета открываются на 2х разных портах. И для сервера 127.0.0.1:51000 и 127.0.0.1:51001 это два разных адреса и два разных пира, даже если это один процесс в ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:59:45 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
подытожу, Т.е. так на клиенте без проблем можно: Socket socket1 = new Socket("localhost", 210), socket2 = new Socket("localhost", 210); и они могут одновременно отправлять данные на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 15:14:36 |
|
||
|
Клиентские сокеты, Java Core
|
|||
|---|---|---|---|
|
#18+
trueCoderподытожу, Т.е. так на клиенте без проблем можно: Socket socket1 = new Socket("localhost", 210), socket2 = new Socket("localhost", 210); и они могут одновременно отправлять данные на сервер. Конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 15:17:27 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=206&tid=2128459]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
63ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 327ms |

| 0 / 0 |
