Многопоточное приложение с UDP + Java - PullRequest
0 голосов
/ 13 февраля 2011

У меня проблемы с созданием многопоточных сокетов Datagram для обучения в Java.

У меня есть класс Server, который порождает два потока Send и Recieve, каждый из которых в настоящее время имеет один и тот же IP-адрес "localhost" для целей тестированияи разные порты для связи.

На другом конце у меня есть класс Client, который получает данные соединения из порта отправки, а затем отправляет запрос на другой пакет через порт приема сервера.

У меня проблема в том, что когда я запускаю оба из них, сервер отправляет данные, а клиент получает их, но в противоположном направлении ....

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

Вот часть кода

Создание двух потоков: -

    SendServer SendThread = new SendServer();
SendThread.run();
RecieveServer RecieveThread = new RecieveServer();
RecieveThread.run();

В потоке отправки я объявляю DatagramPacket с localhost и portno, и аналогично делаю это дляcieve thread с другим номером порта

На стороне клиента я пишу 2 сокета с 2 портами и использую один для отправки, а другой для получения ...

В чем ошибка в этой программе... Приводит к тому, что проблема запуска потоков по одному приводит к тому, что на стороне сервера не получается ??

Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 13 февраля 2011

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

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

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