Другая программа (сервер) создает сокет и обслуживает запросы клиента (листинг 2).
1. import java.net.*;
2. import java.io.*;
3. public class UDPServer{
4. public static void main(String args[]) {
5. DatagramSocket aSocket = null;
6. try{
7. aSocket = new DatagramSocket(7777); // create socket at port
8. byte[] buffer = new byte[1000];
9. while(true){
10. DatagramPacket request = new DatagramPacket(buffer, buffer.length);
11. aSocket.receive(request);
12. DatagramPacket reply =
13. new DatagramPacket(request.getData(), request.getLength(),
14. request.getAddress(), request.getPort());
15. aSocket.send(reply);
16. }
17. } catch (SocketException e) {System.out.println("Socket: " + e.getMessage());
18. // socket creation failed
19. } catch (IOException e) {System.out.println("IO: " + e.getMessage());
20. } finally {if(aSocket != null) aSocket.close();}
21. }
22. }
Листинг 2. Сервер
В том случае, когда при установке пакета jdk в системе были установлены соответствующие пути, для компиляции примера нужно выполнить следующие действия:
· перейти в каталог, где сохранены файлы UDPClient.java и UDPServer.java;
· набрать в командной строке команду компиляции javac *.java.
После компиляции в текущем каталоге должны появиться два файла: UDPClient.class и UDPServer.class, которые представляют собой наши классы, откомпилированные в байт-код.
Первым запускается сервер, для его запуска необходимо, находясь в каталоге, где лежат исполняемые файлы, выполнить команду:
java UDPServer.
Результат работы команды приведен ниже на рис.1.1.
Рис. 1 Вывод сервера
Рис. 2 Вывод клиента
После запуска сервер переходит в режим ожидания сообщений от клиента. Поскольку нами не предусмотрено никакого механизма останова сервера, выгрузить его может либо произошедшая ошибка, либо насильственное прерывание процесса.
Клиент запускается следующим образом:
java UDPClient Hello,Server! 127.0.0.1
Первый параметр определяет строку, которая будет передана серверу, второй - адрес узла, на котором запущен сервер. В данном случае и клиент, и сервер запущены на одной машине, поэтому в качестве адреса используется адрес 127.0.0.1 (localhost).
После запуска клиент отправляет строку на сервер, печатает ее в консоли и завершает работу (рис. 2). Сервер же продолжает ожидать очередное подключение следующего клиента (рис. 1).