2011-02-10 3 views
0

Мне нужно отслеживать состояние устройства из моего приложения Java (пример устройства ip = 192.168.0.22 и порт 17000, монитор означает, что я отправляю каждый 1-секундный запрос и получаю данные как ответ). Мне нужно параллельно с этим отправлять на это устройство другие сообщения и получать ответы (на одном и том же ip и том же порту). Я создаю socket = new Socket (ipAddress, порт). Как добиться этого, я не получаю столкновение (мне нужно: я отправляю сначала, сначала получаю ответ, я посылаю второй, я получаю ответ со второго, я посылаю третье, я получаю ответ от третьего и т. Д.)?Java-параллельная отправка

+0

Это UDP или TCP? – Guillaume

ответ

1

Если меня не хватает чего-то,

  • вы можете сделать каждый в отдельном потоке,
  • или вы можете отправить запрос на все три розетки и ждать всех трех ответов.
  • или вы могли бы спроектировать свой сервер одновременно с тремя запрошенными запросами. (Он может работать корректно). Отправьте три запроса одному соединению и подождите три ответа.

Последнее может быть самым эффективным решением.

1

Если ваша работа заботится о заказе, вы должны отправить данные запроса один за другим, в моем понимании, что вы имеете в виду, что вы получите столкновение, когда вы отправляете данные на устройство в одно и то же время, устройство ответит вам? не беспокойтесь, потому что сокет должен буферизировать, один для отправки и другой для получения.

1

Вы можете определить идентификатор типа запроса. Затем на стороне SocketServer реализации вы можете проанализировать идентификатор и передать запрос новому потоку, используемому для работы с этим типом запроса. Таким образом, в вашем случае вы определяете 3 разных обработчика, и каждый тип получает запрос, который вы выбираете обработчику для обработки запроса. Каждый запрос будет выполнен с использованием одного и того же Socket.

Однако из последнего предложения:

мне нужно: Я посылаю первый, я получаю ответ от первого, я посылаю вторым я получаю ответ от второго, я посылаю третьим я получить ответ от третьего и т. д.

Это не похоже на параллельные запросы. Скорее это звучит так, будто вы хотите запускать их один за другим, то есть второй запрос зависит от ответа первого запроса? Если это так, вы просто используете один и тот же сокет (не создавайте новый для каждого запроса). Тогда логика в коде запроса будет просто отправить запрос 1, дождаться ответа 1, затем отправить запрос 2 и т. Д. И т. Д.

Смежные вопросы