2014-02-07 5 views
0

Я реализую FTP-программу с использованием UDP в Java (TCP не вариант), но у меня проблемы с пониманием того, как она должна работать.Основные принципы UDP-сервера с несколькими клиентами

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

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

Я знаю, что я мог бы выпрыгнуть из цикла, чтобы обработать его, но если, наконец, придет первоначальный ожидаемый пакет, как я могу взять туда, где я остановился?

ответ

0

UDP-сервер во многом похож на TCP. Основное различие заключается в том, что вы не получите подтверждение того, что ваши пакеты были получены. Вы все равно должны знать, к какому клиенту вы отправляете, поэтому используйте класс DatagramSocket. Это учебник Oracle для UDP: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html. В нем есть довольно хороший пример. Значительная часть получает адрес и порт оригинального клиента, и возвращает свои пакеты этого клиента:

InetAddress address = packet.getAddress(); 
int port = packet.getPort(); 
new DatagramPacket(buf, buf.length, address, port); 

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

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