как подключаться и отправлять данные между многими компьютерами, используя сеть Java - PullRequest
0 голосов
/ 20 сентября 2009

Я начинающий изучать Java Networking. Я хочу подключить 3 или более компьютеров. Один для сервера и другие (например, A и B) для клиентов. Но я хочу подключиться

  1. A к серверу и наоборот
  2. B на сервер и наоборот
  3. от А до Б и наоборот

Сначала я хочу отправить сообщение с сервера A или B на сервер, и сервер отправит сохраненные данные отправителю (например, A), и отправитель (A) подключится к B. Затем A и B подтвердят сообщение, а A и B отправят данные друг другу. Но этот случай может происходить от А и Б одновременно.

Но я только что выучил простой код для соединения одного сервера и одного клиента с помощью сокета и сокета сервера. Будут ли все 3 компьютера работать как для сервера, так и для клиента? Есть ли другие способы связи между клиентами. Я не знаю, как решить для решения конфликта данных между компьютерами. Я также хочу удовлетворить, если новые клиенты добавлены. Если кто-нибудь знает, как решить вышеуказанную проблему, включая конфликты данных, пожалуйста, помогите мне с простым примером кода для сервера и клиентов.

Ответы [ 3 ]

1 голос
/ 20 сентября 2009

Вы можете использовать сокеты. Я знаю, что вы уже делаете это, но я думаю, что вы должны сделать это таким образом.

Сервер

ServerSocket server = new ServerSocket(2009); // 2009 is the networkport
while (acceptingClients)
{
    Socket socket = server.accept();
    ClientHandler handler = new ClientHandler(socket); // ClientHandler, you have to make by yourself
    Thread thread = new Thread(handler, "Handler");
    /* Use a thread, so you can connect more clients at the same
     * time. Of course ClientHandler must implement java.lang.Runnable
     */
    thread.start();
}

Клиент

Socket socket = new Socket(host, 2009); // host is a String with ipadress from the server. Use the same port

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

socket.getOutputStream();
socket.getInputStream();

Не закрывайте авторов, так как в противном случае соединение будет закрыто. flush() может путем решения.

Надеюсь, это поможет

1 голос
/ 20 сентября 2009

Звучит так, будто вы ищете какой-то тип группового общения. Это может быть выполнено с использованием многоадресной IP-рассылки, и очень удобной библиотекой Java является JGroups (добавляет надежность и членство в группах). Если вы не возражаете абстрагироваться от IP, вам может понадобиться Java Messaging Service , который является стандартным интерфейсом для многих реализаций обмена сообщениями, который обеспечивает надежность и транзакции для сообщений публикации-подписки и сообщений типа очереди .

0 голосов
/ 20 сентября 2009

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

Вы можете обойти проблему клиентских машин (A, B), находящихся за брандмауэром, который мешал бы им устанавливать прямые соединения, проводя опрос каждого из них.сервер с интервалами спрашивает, есть ли для них какие-либо данные;поэтому, когда A имеет данные для B, он отправляет запрос серверу, который в следующий раз подключается к B, с просьбой сообщить ему об этом.

A затем ждет с открытым соединением, пока B не опрашивает, и ему сообщают, чтоЗатем сервер сообщает A, что B готов и может действовать как прокси, пока один или другой не разорвет соединение.

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