Чтение онлайн

ЖАНРЫ

Программирование на Java

Вязовик Н.А.

Шрифт:

try {

DatagramSocket s =

new DatagramSocket(3456);

byte data[]=new byte[3];

DatagramPacket p =

new DatagramPacket(data, 3);

System.out.println("Waiting...");

s.receive(p);

System.out.println("Datagram received: "+

data[0]+", "+data[1]+", "+data[2]);

s.close;

}

catch (SocketException e) {

e.printStackTrace;

}

catch (IOException e) {

e.printStackTrace;

}

Если

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

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

import java.io.*;

import java.net.*;

public class DatagramDemoServer {

public static final int PORT = 2000;

private static final int LENGTH_RECEIVE = 1;

private static final byte[] answer = ("received").getBytes;

private DatagramSocket servSocket = null;

private boolean keepRunning = true;

public static void main(String[] args) {

DatagramDemoServer server = new DatagramDemoServer;

server.service;

}

public DatagramDemoServer {

try {

servSocket = new DatagramSocket(PORT);

}

catch(SocketException e) {

System.err.println("Unable to open socket : " + e.toString);

}

}

protected void service {

DatagramPacket datagram;

InetAddress clientAddr;

int clientPort;

byte[] data;

while (keepRunning) {

try {

data = new byte[LENGTH_RECEIVE];

datagram = new DatagramPacket(data, data.length);

servSocket.receive(datagram);

clientAddr = datagram.getAddress;

clientPort = datagram.getPort;

data = getSendData(datagram.getData);

datagram = new DatagramPacket(data, data.length,

clientAddr, clientPort);

servSocket.send(datagram);

}

catch(IOException e) {

System.err.println("I/O Exception : " + e.toString);

}

}

}

protected byte[] getSendData(byte b[]) {

byte[] result = new byte[b.length+answer.length];

System.arraycopy(b, 0, result, 0, b.length);

System.arraycopy(answer, 0, result, b.length, answer.length);

return result;

}

}

Пример 16.4.

Заключение

В данном разделе были рассмотрены теоретические основы сети как одной большой взаимодействующей системы. Были описаны все уровни модели OSI и их функциональные назначения. Также были представлены основные утилиты, используемые для настройки и обнаружения неисправностей в сети. Затем были рассмотрены средства Java для работы с наиболее распространенными сетевыми протоколами. Приведен подробный пример и для более сложного случая – сервер, обслуживающий несколько клиентов одновременно.

Поделиться с друзьями: