Beispiele Socket-Anwendung mit Java Beide Beispiele zeigen einen Client, der sich mit dem echo-Daemon eines Rechners verbindet. 1. Socket mit TCP Der EchoClient liefert die eigentliche Funktionalität, die Klasse EchoTest erzeugt den verwendeten Socket und den EchoClient. import java.io.*; import java.net.*; /** Class EchoClient = Client, der auf Port 7 schreibt und das Echo des Servers abhoert */ public class EchoClient { private BufferedReader kybd; /** Konstruktor */ public EchoClient () { kybd = new BufferedReader(new InputStreamReader(System.in)); } /** Methode echoclient, die die Eingabe von Tastatur uebernimmt und als Echo Beispiel bearbeitet */ public void echoclient (BufferedReader in, PrintStream out) { String line; while (true) { line = ""; // von Tastatur lesen und an TCP socket weitergeben try { line = kybd.readLine(); out.println(line); } catch (IOException e) { System.err.println(e.getMessage());} // TCP socket lesen und auf Konsole ausgeben try { line = in.readLine(); System.out.println(line + "... echo von Socket"); } catch (IOException e) { System.err.println(e.getMessage());} } } } 1 import java.io.*; import java.net.*; /** Class EchoTest ist Testklasse, die eine Socketverbindung mit Port 7 eines gewuenschten Hosts erstellt und ein Objekt der Klasse EchoClient auf diesem Port arbeiten laesst. */ public class EchoTest { public static void main (String [] args) { Socket s = null; EchoClient client = new EchoClient(); BufferedReader in; PrintStream out; try { s = new Socket (args[0], 7); in = new BufferedReader(new InputStreamReader(s.getInputStream())); out = new PrintStream (s.getOutputStream()); System.out.println("Connected to " +s.getInetAddress() +":" +s.getPort()); client.echoclient (in, out); } catch (IOException e) { System.err.println(e);} // Aufraeumen am Ende! finally { try { if (s != null) s.close(); } catch (IOException e) {} } } } 2 2. Socket mit UDP Hier erzeugt der Client auch den UDP-Socket, mit dem dann die Nachrichten verschickt werden. import java.io.*; import java.net.*; public class UDPEchoClient { private BufferedReader kybd; private DatagramSocket udpSocket; private InetAddress hostAddress; private byte buf []; private DatagramPacket dp; public UDPEchoClient () { buf = new byte [1000]; try { udpSocket = new DatagramSocket(); kybd = new BufferedReader(new InputStreamReader(System.in)); hostAddress = InetAddress.getByName("localhost"); } catch (Exception e) { System.err.println(e); } } public void udpEchoclient () { String line; try { while (true) { line = ""; // von Tastatur lesen und an UDP socket weitergeben try { line = kybd.readLine(); byte [] message = new byte [line.length()]; message = line.getBytes(); DatagramPacket packet = new DatagramPacket (message, line.length(), hostAddress, 7); udpSocket.send(packet); dp = new DatagramPacket (buf, buf.length); udpSocket.receive(dp); System.out.println("von " +dp.getAddress() +":" +dp.getPort() +"erhalten: " +new String(dp.getData(),0,dp.getLength())); } catch (IOException e) { System.err.println(e.getMessage());} } } finally { try { if (udpSocket != null) udpSocket.close();} catch (Exception e) {} } } } 3 import java.io.*; public class UDPEchoTest { public static void main (String [] args) { UDPEchoClient client = new UDPEchoClient(); client.udpEchoclient (); } } 4