Java Reference
In-Depth Information
data it contains is transferred into the specified buffer, and receive() returns. If
the datagram contains more bytes than fit to the specified buffer, the extra bytes
are discarded. When a datagram arrives, receive() also stores the host and port
that the datagram was sent from into the packet.
Example 5•12: UDPReceive.java
package com.davidflanagan.examples.net;
import java.io.*;
import java.net.*;
/**
* This program waits to receive datagrams sent the specified port.
* When it receives one, it displays the sending host and prints the
* contents of the datagram as a string. Then it loops and waits again.
**/
public class UDPReceive {
public static final String usage = "Usage: java UDPReceive <port>";
public static void main(String args[]) {
try {
if (args.length != 1)
throw new IllegalArgumentException("Wrong number of args");
// Get the port from the command line
int port = Integer.parseInt(args[0]);
// Create a socket to listen on the port.
DatagramSocket dsocket = new DatagramSocket(port);
// Create a buffer to read datagrams into. If anyone sends us a
// packet containing more than will fit into this buffer, the
// excess will simply be discarded!
byte[] buffer = new byte[2048];
// Create a packet to receive data into the buffer
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// Now loop forever, waiting to receive packets and printing them.
for(;;) {
// Wait to receive a datagram
dsocket.receive(packet);
// Convert the contents to a string, and display them
String msg = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName() +
": " + msg);
// Reset the length of the packet before reusing it.
// Prior to Java 1.1, we'd just create a new packet each time.
packet.setLength(buffer.length);
}
}
catch (Exception e) {
System.err.println(e);
System.err.println(usage);
}
}
}
Search WWH ::




Custom Search