Ecco un esempio client-server su datagram: il client invia una stringa al server, il server riceve la stringa, la inverte e la rimanda al client.
Codice:
import java.io.*;
import java.net.*;
import java.util.*;
public class StringReverseDatagramServer extends Thread
{
private DatagramSocket socket;
public StringReverseDatagramServer (int port)
throws IOException
{
super ("StringReverseDatagramServer");
socket = new DatagramSocket (port);
}
public void run ()
{
try
{
byte[] bufinp = new byte[256];
DatagramPacket packet = new DatagramPacket (bufinp, bufinp.length);
socket.receive (packet);
String inp = new String (packet.getData (), 0, packet.getLength (), "UTF-8");
String out = reverseString (inp);
byte[] bufout = out.getBytes ("UTF-8");
InetAddress address = packet.getAddress ();
int port = packet.getPort ();
packet = new DatagramPacket (bufout, bufout.length, address, port);
socket.send (packet);
socket.close ();
}
catch (IOException e)
{
e.printStackTrace ();
}
}
private String reverseString (String s)
{
int len = s.length ();
StringBuffer sb = new StringBuffer (len);
for (int i=0; i<len; i++)
sb.append (s.charAt (len-i-1));
return sb.toString ();
}
}
Codice:
import java.io.*;
import java.net.*;
import java.util.*;
public class StringReverseDatagramClient
{
public static void main (String[] args)
{
try
{
/* Avvia server */
StringReverseDatagramServer server = new StringReverseDatagramServer (5555);
server.start ();
/* Avvia client */
DatagramSocket socket = new DatagramSocket ();
InetAddress address = InetAddress.getByName ("localhost");
String inp = "Hello to server";
byte[] bufinp = inp.getBytes ("UTF-8");
DatagramPacket packet = new DatagramPacket (bufinp, bufinp.length, address, 5555);
socket.send (packet);
byte[] bufout = new byte[256];
packet = new DatagramPacket (bufout, bufout.length);
socket.receive (packet);
String out = new String (packet.getData (), 0, packet.getLength (), "UTF-8");
System.out.println (out);
socket.close ();
}
catch (Exception e)
{
e.printStackTrace ();
}
}
}