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:
Öppna ett nytt fönster och skriv:
[olle@dev1]$ java EchoServer
EchoServer running
Om vi avbryter med Ctrl-C så kommer även Servern att stängas.
[olle@dev1]$ java EchoClient
Give input: hej alla
echo:hxexjx xaxlxlxax
Give input: