Improved UDPClient.java
As per our in-class discussion on 2002-02-22, Kurose and Ross's
UDPClient.java program can be improved in the following ways:
- There is no reason to allocate an array of 1024 bytes to
initialize
sendData, because this array becomes garbage
without ever being used.
- Receiving a packet shouldn't hang forever; a timeout should be
set. (Ideally the client should then retry the request, since it is
idempotent. This isn't illustrated below.)
- When the received data is converted into
a
String, not all 1024 bytes should be converted.
Instead, the received packet's length should govern this.
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader
(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress =
InetAddress.getByName("max.mcs.gac.edu.");
byte[] sendData;
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket =
new DatagramPacket(receiveData,
receiveData.length);
clientSocket.setSoTimeout(1000);
clientSocket.receive(receivePacket);
String modifiedSentence =
new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("FROM SERVER:" +
modifiedSentence);
clientSocket.close();
}
}