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

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

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

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

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

Пример кода.

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

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

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

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

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

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


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