Presentation is loading. Please wait.

Presentation is loading. Please wait.

Jan. 20041 Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg.

Similar presentations


Presentation on theme: "Jan. 20041 Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg."— Presentation transcript:

1 Jan. 20041 Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

2 Jan. 20042 User Datagram Protocol UDP (User Datagrarn Protocol) - a protocol that sends independent packets of data, called datagrams, from one computer to another with no guarantees about arrival - not connection based like TCP If a UDP packet is lost, IT’S LOST. The packets appear in the order they are received not necessarily in the order they were sent.

3 Jan. 20043 So Why UDP? Speed! UDP can be up to three times faster than TCP. There are applications where speed is more important than reliability, such as audio and video data.

4 Jan. 20044 UDP Java classes using UDP -java. net DatagramPacket() DatagramSocket()

5 Jan. 20045 UDP Classes Java has two classes for UDP support java.net.DatagramSocket java.net.DatagramPacket A DatagramSocket is used to send and receive DatagramPacket. Since UDP is connectionless, streams are not used. The maximum size of a Datagrarm packet is limited to slightly less than 64Kbytes.

6 Jan. 20046 UDP Classes DatagramSockets are connected to a port that allow for sending and receiving of data. Unlike TCP sockets, there is no distinction between client and server sockets in UDP. Also, a DatagramSocket can be used to send data to multiple different hosts. - This is because the address is stored in the packet, not in the socket. There are 65,536 UDP ports as well as TCP ports that are separate from each other.

7 Jan. 20047 DatagramPacket Class You construct a DatagrarmPacket by using one of the two constructors. - public DatagramPacket(byte[] data, int length) - public DatagramPacket(byte[] data, int length, InetAddress addr, int port) The byte array is passed by reference and not by value. A change in its contents will change the packet.

8 Jan. 20048 DatagramPacket Class Example of using the constructors: String data = "My UDP Packet”; byte[] h = data.getBytes(); DatagramPacket dp = new DatagramPacket(b, b.length) You can also pass in the host and port to which the packet is to be sent.

9 Jan. 20049 DatagramPacket Class try { InetAddress tr = new InetAddress(" www.win.trlabs.ca”); int port = 9100; String data = "Another UDP Packet"; byte[] b = data.getBytes( ); DatagramPacket dp = new DatagramPacket(b, b.length, tr,port); }//try catch (UnknownHostException e) { System.err.printin(e); }//catch

10 Jan. 200410 DatagramPacket Class After creation of a DatagramPacket, it is possible to change the date, the length of the data, the port, or the address by using the following methods: setAddress(InetAddress addr) setPort(int port) setData(byte buf[]) setLength(int length) To retrieve the current status of a DatagramPacket, use the corresponding get methods.

11 Jan. 200411 DatagramSocket Class This class is a connection to a port that does the transmitting and receiving. Unlike TCP sockets, the same Datagramsocket can be used to send and receive. The Datagramsocket class has three constructors.

12 Jan. 200412 DatagramSocket Class public DatagramSocket() public DatagramSocket(int port) public Datagramsocket(int port, InetAddress addr) all three constructors throw an IOException. The first constructor is mainly used to act as clients. The other two that specify a port and optionally an IP address are intended for servers that must run on a well known port.

13 Jan. 200413 Sending UDP Datagrams 1) Convert the data into a byte array. 2) Pass this byte array, length of data, port and address to the DatagramPacket constructor. 3) Create a DatagramSocket object. 4) Pass the Datagram packet to the send method.

14 Jan. 200414 Sending UDP Datagrams try { TnetAddress tr=new InetAddress("win.tr1abs.ca”); int pt=9100; string data = "Sending a Datagram"; byte[] b = data.getBytes(); DatagramPacket dP=new DatagramPacket(b,b.length,tr,pt); }//try catch (UnknownHostException e) { system.err.println(e); }//catch

15 Jan. 200415 Sending UDP Datagrams try { DatagramSocket sender = new Datagramsocket(); sender.send(dP); }//try catch (IOException e) { system.out.printIn(e); }//catch

16 Jan. 200416 Receiving UDP Datagrams 1) Construct a DatagramSocket object on the port you wish to listen. 2) Pass it an empty Datagrampacket object to the Datagramsocket’s receive() method. 3) Use methods getport ( ), getAddress( ), getData ( ), getLength( ) to retrieve information about the data.

17 Jan. 200417 Receiving UDP Datagrams try { byte buf=new byte[655361; DatagramPacket dp = new DatagramPacket(buf, buf.length); DatagramSocket ds=newDatagramSocket(9100); ds.receive(dp); byte[] data=dp.getData(); String s=new String(data, 0, data.getLength()); System.out.println(s); }//try catch (IOException e) { System.err.println(e); }//catch

18 Jan. 200418 UDP Echo Example As with the TCP echo port, the UDP echo port is port 7. When this port receives a datagram, it copies the data and sends it back to the user. As with the TCP echo example, the UDP echo example will read in data from System.in, send it to the echo server on port 7 and then display the results. Remember that since UDP is connectionless, a packet might be lost somewhere between the client and the server.

19 Jan. 200419 UDP Echo Example import java.io.*; import java.net.*; public class UDPEcho extends Thread { static int port=7; static volatile boolean running=false; DatagramSocket ds; public static void main(String args[]) { InputstreamReader isr=new InputStreamReader(System.in); BufferedReader in = new BufferedReader(isr); String line;

20 Jan. 200420 UDP Echo Example running=true; try{ while ((line==in.readLine()) != null) { byte[] data = line.getBytes(); DatagramPacket dP = new DatagramPacket (data, data.length, server, port); ds.send(dp); Thread.yield(); }//while }//try

21 Jan. 200421 UDP Echo Example catch(IoException e) { system.err.println(e); } //catch running = false; } //main public UDPEcho(DatagramSocket ds) { this.ds=ds; } //UDPEcho constructor

22 Jan. 200422 UDP Echo Example public void run() { byte[] buf = new byte[1024]; String line; DatagramPacket incoming = new DatagramPacket (buf, buf.length); while(running) { try{ ds.receive(incoming); byte[] data = incoming.getData(); line = new String(data,0,incoming.getLength());

23 Jan. 200423 UDP Echo Example System.out.println("Echo: ", line); } //try catch(IOException e){ system.err.println(e); }//catch }//while }//run }//UDPEcho class


Download ppt "Jan. 20041 Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg."

Similar presentations


Ads by Google