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