Block 11 Datagram Examples Jin Sa 9162020 Clientserver
Block 11: Datagram Examples Jin Sa 9/16/2020 Client-server Programming 1
The Java Datagram Socket API In Java, two classes are provided for the datagram socket API: 1. the Datagram. Socket class for the sockets. 2. the Datagram. Packet class for the datagram exchanged. 9/16/2020 Client-server Programming 2
Key Methods and Constructors for Datagram -- Datagram. Socket • Datagram. Socket() constructor, used if no need to receive datagram • Datagram. Socket(int port) constructor, used if need to receive packet. The port number can then be specified in the datagram packet sent by the other process. • void close() to close the datagram socket 9/16/2020 Client-server Programming 3
Key Methods and Constructors for Datagram-- Datagram. Socket • void send(Datagram. Packet p) to send the datagram packet pointed by p using this datagram socket • void receive(Datagram. Packet p) to receive a datagram packet, p will refer to the packet • void set. So. Timeout(int timeout) Sets a timeout period for the blocking receive operations 9/16/2020 Client-server Programming 4
Key Methods and Constructors for Datagram -- Datagram. Packet • Datagram. Packet(byte[] buf, int l) constructor for receiving packets of length l, data received will be stored in buf • Datagram. Packet(byte[] buf, int l, Inet. Address ip. Address, int port) constructor for sending packets to the socket bound to the port number on the receiving host. 9/16/2020 Client-server Programming 5
Example • Sender – version 1 – Create a datagram socket – Put the message “Hello!” in a byte array – Create a data packet with the receiver’s address and port number, and the byte array – Send datagram in the packet through the datagram socket • Receiver – version 1 – Create a datagram socket bound to a port (12345) – Create a datagram packet includes a reference to a byte array – Receive a data packet through the datagram socket 9/16/2020 Client-server Programming 6
Sender import java. net. *; import java. io. *; public class Sender { public static void main(String[] args) { try { //get receiver’s address – see slide Sender (1) // create byte array for the message and create datagram packet – //see slide Sender (2) // create datagram socket – see slide Sender (3) // send packet – see slide Sender (4) // close datagram socket – see slide Sender (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 7
Sender (1): get receiver’s address public class Sender { public static void main(String[] args) { try { //get receiver’s address Inet. Address receiver. Host = Inet. Address. get. By. Name("localhost"); int receiver. Port = 12345; // create byte array for the message and create datagram packet – //see slide Sender (2) // create datagram socket – see slide Sender (3) // send packet – see slide Sender (4) // close datagram socket – see slide Sender (5) } // end try catch (Exception ex) { … } } // end main } // end class 9/16/2020 Client-server Programming 8
Sender (2): create datagram packet public class Sender { public static void main(String[] args) { try { //get receiver’s address – see slide Sender (1) // create byte array for the message and create datagram packet // put message into byte array String message = "hello"; byte[ ] buffer = message. get. Bytes( ); //create datagram packet with the receiver’s address Datagram. Packet datagram = new Datagram. Packet(buffer, buffer. length, receiver. Host, receiver. Port); //Create datagram socket – see slide Sender (3) // send packet – see slide Sender (4) // close datagram socket – see slide Sender (5) } // end try catch (Exception ex) { … } } // end main } // end class 9/16/2020 Client-server Programming 9
Sender (3): create a datagram socket import java. net. *; import java. io. *; public class Sender { public static void main(String[] args) { try { //get receiver’s address – see slide Sender (1) // create byte array for the message and create datagram packet – //see slide Sender (2) // create datagram socket Datagram. Socket my. Socket = new Datagram. Socket(); // send packet – see slide Sender (4) // close datagram socket – see slide Sender (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 10
Sender (4): Send a packet import java. net. *; import java. io. *; public class Sender { public static void main(String[] args) { try { //get receiver’s address – see slide Sender (1) // create byte array for the message and create datagram packet – //see slide Sender (2) // create datagram socket – see slide Sender (3) // send packet my. Socket. send(datagram); // close datagram socket – see slide Sender (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 11
Sender(5): close the datagram socket import java. net. *; import java. io. *; public class Sender { public static void main(String[] args) { try { //get receiver’s address – see slide Sender (1) // create byte array for the message and create datagram packet – //see slide Sender (2) // create datagram socket – see slide Sender (3) // send packet – see slide Sender (4) // close datagram socket my. Socket. close( ); } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 12
Receiver import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet – see slide Receiver (1) // create a datagram socket for receiving the data – see slide Receiver (2) //set timeout – see slide Receiver (3) //receive message – see slide Receiver (4) //close socket – see slide Receiver (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 13
Receiver (1): import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet final int MAX_LEN = 10; byte[ ] buffer = new byte[MAX_LEN]; Datagram. Packet datagram = new Datagram. Packet(buffer, MAX_LEN); // create a datagram socket for receiving the data – see slide Receiver (2) //set timeout – see slide Receiver (3) //receive message – see slide Receiver (4) //close socket – see slide Receiver (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 14
Receiver (2): import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet – see slide Receiver (1) // create a datagram socket for receiving the data – see slide Receiver (2) int port =12345; Datagram. Socket my. Socket = new Datagram. Socket(port); //set timeout – see slide Receiver (3) //receive message – see slide Receiver (4) //close socket – see slide Receiver (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 15
Receiver(3): import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet – see slide Receiver (1) // create a datagram socket for receiving the data – see slide Receiver (2) //set timeout my. Socket. set. So. Timeout(5000); //receive message – see slide Receiver (4) //close socket – see slide Receiver (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 16
Receiver(4): import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet – see slide Receiver (1) // create a datagram socket for receiving the data – see slide Receiver (2) //set timeout – see slide Receiver (3) //receive message – see slide Receiver (4) my. Socket. receive(datagram); //close socket – see slide Receiver (5) } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 17
Receiver(5): import java. net. *; import java. io. *; public class Receiver { public static void main(String[] args) { try { // create datagram packet – see slide Receiver (1) // create a datagram socket for receiving the data – see slide Receiver (2) //set timeout – see slide Receiver (3) //receive message – see slide Receiver (4) //close socket – see slide Receiver (5) my. Socket. close( ); } // end try catch (Exception ex) { ex. print. Stack. Trace( ); } } // end main } // end class 9/16/2020 Client-server Programming 18
More Datagram APIs Datagram. Socket my. Socket = new Datagram. Socket(port); Datagram. Packet datagram = new Datagram. Packet(buffer, MAX_LEN) … datagram. get. Address(); //returns address of datagram packet sender datagram. get. Port(); //returns port of sender datagram. get. Length(); //returns length of packet … my. Socket. get. Local. Port(); //returns the local port bound to the socket. 9/16/2020 Client-server Programming 19
- Slides: 19