Как я могу использовать SocketServer, чтобы начать связь с клиентом в Java? - PullRequest
0 голосов
/ 17 ноября 2011

Во-первых, я совсем новичок в использовании сокет-связи, поэтому есть еще кое-что, чего я не знаю. Я понимаю основы взаимодействия с сокетом в Java, поэтому ищу руководство здесь.

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

Пока ничего особенного. Проблема в том, что мне нужно использовать mi serverSocket, чтобы начать разговор с Клиентом. Это означает, что мой serverSocket должен будет отправить некоторую информацию клиенту без запроса клиента об этом.

Для определения я понимаю, что serverSockets - это потоки, которые ждут, пока Клиент откроет соединение с ними, после того, как это соединение установлено, диалог между приложениями обычно начинается с некоторого запроса (то есть символа ENQ) от Клиента, чтобы запустить обмен информацией; это для случаев, когда существует некоторый протокол для проверки, отправки и получения данных. В противном случае информация отправляется клиентом без тщательной проверки и контроля.

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

Имея это в виду, мой вопрос таков: есть ли способ, с помощью которого я могу использовать свой работающий и ожидающий serverSocket для отправки некоторой информации из моего приложения на удаленный клиент, когда процесс в моем приложении необходим? как я вызываю из третьего компонента в моем приложении открытый сокет в serverSocket для записи на него?

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Похоже, что вы ищете, это сокет UDP.

Посмотрите на класс DatagramSocket.

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

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

Как только соединение установлено, различие между server и client является произвольным.Там нет требования о том, кто должен передавать в первую очередь.Все зависит от протокола, который вы реализуете.

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

Проблема в том, что мне нужно использовать mi serverSocket, чтобы начать разговор с Клиентом.Это означает, что мой serverSocket должен будет отправить некоторую информацию клиенту без запроса клиента об этом.

Это даже не имеет смысла.Вся идея ServerSocket заключается в том, что клиент инициирует соединение.И ServerSockets не может отправлять данные.

Вам необходимо разобраться с вашим требованием: оно не имеет смысла, как указано.

...