programmera.net -> java -> normal     för utskrift      info@programmera.net

Exempel: Echo med Socket

1. Exemplet Socket Echo
2. EchoServer
3. EchoClient
4. En körning av Echo

1. Exemplet Socket Echo

Nedan skriver vi ett exempel som tar inmatning från tangentbordet, och skickar tillbaka samma text, med x mellan varje bokstav. Detta exempel implementerar funktionen genom att öppna en socket på serversidan och en socket på klientsidan. Detta samma exempel utförs även med RMI på sidan  Exempel: Echo med RMI .

2. EchoServer

Såhär ser servern ut:
import java.io.*;
import java.net.*;

public class EchoServer{

  public static void main(String[] args){
    try{
      ServerSocket listen=new ServerSocket(10111);
      System.out.println("EchoServer running");
      boolean moreRounds=true;
      Socket socket=listen.accept();
      BufferedReader sin= new BufferedReader(new InputStreamReader(socket.getInputStream()));
      PrintWriter sout= new PrintWriter(socket.getOutputStream());
      while(moreRounds){
        String s=sin.readLine();
        System.out.println("Client input="+s);
        String res="";
        for(int i=0; i<s.length(); i++)
                res+=s.charAt(i)+"x";
        sout.println(res);
        sout.flush();
      }

      // close everything
      sout.close();
      sin.close();
      socket.close();

    } catch(Exception e){
      System.err.println("Error: "+e);
      System.exit(1);
    }
  }
}

3. EchoClient

Nedan visas koden för EchoClient (som ligger på klienten):
import java.net.*;
import java.io.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {

        Socket socket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            socket = new Socket("localhost", 10111);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String userInput;
        System.out.print("Give Input: ");

        while ((userInput = stdIn.readLine()) != null) {
            out.println(userInput);
            out.flush();
            System.out.println("echo: " + in.readLine());
            System.out.print("Give Input: ");
        }
        // close everything
        out.close();
        in.close();
        stdIn.close();
        socket.close();
    }
}

4. En körning av Echo

En körning av echo kan se ut såhär:
[olle@dev1]$ java EchoServer 
EchoServer running	
Öppna ett nytt fönster och skriv:
[olle@dev1]$ java EchoClient
Give input: hej alla
echo:hxexjx xaxlxlxax
Give input: 
Om vi avbryter med Ctrl-C så kommer även Servern att stängas.