Двухстороннее соединение - PullRequest
3 голосов
/ 25 октября 2011

Я делаю Java-программу, и я хочу, чтобы она была как серверной, так и клиентской (с использованием сокетов).Как это лучше всего достигается?

Ответы [ 5 ]

7 голосов
/ 25 октября 2011

Если вы имеете в виду, что вы хотите отправить и получить данные, один обычный сокет (на каждом компьютере) будет работать нормально. См Socket.getInputStream и Socket.getOutputStream.

Обычное различие между «сервером» и «клиентом» просто сводится к тому, какой хост прослушивает входящие соединения, а какие подключаются к этим хостам. После настройки соединения вы можете отправлять и получать с обоих концов.

Если вы хотите, чтобы оба хоста прослушивали для входящих соединений, тогда просто установите ServerSocket и вызовите accept на обоих хостах.

Ссылки по теме:

0 голосов
/ 17 ноября 2011

Лучший способ сделать это - запустить сервер в потоке:

Вы запускаете server.accept(), поэтому, когда ваша программа ожидает соединения в этом потоке, вы можете делать все, что захотите, в основном потоке, даже подключаться к другому серверу, что делает программу и сервером, и клиентом.

0 голосов
/ 26 октября 2011

Посмотрите на jgroups это библиотека, которая позволяет создавать группы процессов, члены которых могут отправлять сообщения друг другу. Другой вариант - использовать hazelcast ...

Вы также можете посмотреть на этот вопрос .

0 голосов
/ 25 октября 2011

Если вы хотите, чтобы каждая станция работала в качестве сервера и клиента, например, чата p2p,

Вы должны реализовать поток с ServerSocket, прослушивая входящие соединения, и, как только он получит соединение, откройте новый поток, чтобы обработать его, чтобы текущий продолжал прослушивать новые соединения.

Чтобы иметь возможность подключаться к другим, просто используйте SocketAddress и Socket в другом потоке, чтобы попытаться подключиться к указанному адресу сервера (например, по списку друзей пользователя)

Вы можете найти множество примеров в чате, прибегая к помощи Google.

веселит.

0 голосов
/ 25 октября 2011

Если вы хотите, чтобы программа выполняла одни и те же операции независимо от того, является ли она сервером или клиентом для определенного соединения, я мог бы представить, что клиентский Socket и ServerSocket.accept() -произведенный сокет передаются одному и тому же соединению.метод обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...