Подключите два клиентских сокета
Допустим, у Java есть два вида сокетов:
серверные сокеты "ServerSocket"клиентские розетки или просто "розетка"Представьте себе ситуацию двух процессов:
X = Клиент
Y = сервер
Процесс сервера Y: имеет «ServerSocket», который прослушивает порт TCP
Клиентский процесс X: отправляет запрос на соединение через «сокет» Y.
Y: Тогдаaccept()
метод возвращает новый тип клиента "Socket",
когда это происходит, два сокета становятся «взаимосвязанными»,
Итак: сокет в клиентском процессе, связан с сокетом в серверном процессе.
Тогда: чтение / запись через сокет X похоже на чтение / запись через сокет Y.
Теперь дваклиент Розетки соединяются!
Но...
Что если я создаю два клиентских сокета в одном процессе и хочу, чтобы они были «взаимосвязаны»?
... даже возможно?
Скажем, как соединить два клиентских сокета, не используя промежуточный ServerSocket?
Я решил это, создав два потока для непрерывного чтения A и записи B, а другой для чтения B и записи A ...
Но я думаю, что может быть лучше ... (Эти энергозатратные потоки не нужны в подходе клиент-сервер)
Любая помощь или совет будут оценены! Спасибо
Редактировать:
Пример приложения: «Существующее серверное приложение может быть преобразовано в клиентское». Например, VNC-сервер, один клиентский сокет подключается к VNC-серверу, и создается другой клиентский сокет (для подключения к промежуточному серверу), затем приложение соединяет два клиента, в результате чего сервер VNC является клиентским приложением! И тогда, публичный IP не нужен.
VNCServer --- MyApp ---> | промежуточный сервер | <--- Пользователь