java networking udp yangjun chen dept. business computing university of winnipeg

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

Upload: dylan

Post on 20-Jan-2016

39 views

Category:

Documents


0 download

DESCRIPTION

Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 1

Java Networking UDP

Yangjun Chen

Dept. Business ComputingUniversity of Winnipeg

Page 2: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 2

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.

Page 3: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 3

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.

Page 4: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 4

UDP

• Java classes using UDP

- java. netDatagramPacket()DatagramSocket()

Page 5: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 5

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.

Page 6: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 6

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.

Page 7: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 7

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.

Page 8: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 8

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.

Page 9: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 9

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); }//trycatch (UnknownHostException e) {

System.err.printin(e); }//catch

Page 10: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 10

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.

Page 11: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 11

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.

Page 12: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 12

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.

Page 13: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 13

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.

Page 14: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 14

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

Page 15: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 15

Sending UDP Datagrams

try {

DatagramSocket sender = new Datagramsocket();

sender.send(dP); }//try catch (IOException e) {

system.out.printIn(e);}//catch

Page 16: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 16

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 methodsgetport ( ),getAddress( ),getData ( ),getLength( ) to retrieve information about the data.

Page 17: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 17

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);

}//trycatch (IOException e) {

System.err.println(e);}//catch

Page 18: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 18

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.

Page 19: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 19

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=newInputStreamReader(System.in);

BufferedReader in = newBufferedReader(isr);

String line;

Page 20: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 20

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

Page 21: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 21

UDP Echo Example

catch(IoException e) {system.err.println(e); }

//catchrunning = false; }

//mainpublic UDPEcho(DatagramSocket ds) {

this.ds=ds; }//UDPEcho constructor

Page 22: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 22

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());

Page 23: Java Networking UDP Yangjun Chen Dept. Business Computing University of Winnipeg

Jan. 2004 23

UDP Echo Example

System.out.println("Echo: ", line);} //trycatch(IOException e){

system.err.println(e);}//catch

}//while}//run

}//UDPEcho class