Beispiel für SERVER / CLIENT Socket

Es wird über eine Socketverbindung eine Datei auf einem anderen Pc ausgelesen

Client Socket

 

Über einen String als Argument, wird ein Verbindungsaufbau hergestellt

 

Import java.io.* ;

Import java.net.* ;

 

Public class KnockKnockClient

{

Public static void man(String[] args) throws IOException           

{

int x=0;

Socket kkSocket = null;

PrintWriter out = null;

BufferedReader in = null,

 

try   {

   x kkSocket = new Socket(“localhost”, 4444);      // Verbindung zu Server über Port 4444

   out = new PrintWriter(kkSocket.getOutputStream(), true);      //Schreiben

   in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));  //Lesen

         }

catch (UnknownHostException e)  {

   System.err.println(“Don’t’t know about host: taranis.”); //kann den Namen nicht auflösen

   System.exit(1);

}

catch  (IOException e)   {           //kann die IP nicht finden

   System.err.println(“Couldn’t get I/O for the connection to: taranis”);

System.exit(1);

}

 

String fromServer;

String fromUser=”testfile”;

   out.println(fromUser);   //schickt die Testfile an den Server

 

while   ((fromServer = in.readLine()) != null)   {  //liest vom Server, wenn eine Antwort “Bye”

kommt wird die Aktion beendet

   System.out.println(“Server: “ + fromServer);

   if (fromServer.equals(“Bye.”))

   break;

 

   if (fromUser != null)   { //was der Client schickt

   System.out.println(“Client: “ + fromUser);

   fromUser = null;

} 

   }

out.close();

in.close();

kkSocket.close();

}

}

 

Server Socket

 

Import java.net.* ;

Import java.io.* ;

 

Public class KKMultiServer   

{

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

   {

 

Hier werden alle gesetzten Elemente zurück auf null gesetzt

   ServerSocket serverSocket = null;

   Boolean listening = true;

 

Nun wird der SeverSocket zum Hören auf Port 444 gesetzt

   try   {

               serverSocket = new ServerSocket (4444);

           }

   catch (IOException e)

           {

               System.err.println(“Couldn’t’t listen on port: 4444.”);

               System.exit(-1);

            }

 

Wird die Verbindung akzeptiert, (durch “true” immer) wird die Verarbeitung an den Thread übergeben

 

   while (listening)

   {

new KKKMultiServerThread(serverSocket.accept()).start();

   }

   serverSocket.close();

     }

}

 

 

ServerThread zum Verarbeiten der Anfragen des Clients

 

Import java.net.* ;

Import java.io.* ;

 

Übergabe des Sockets an das Thread

 

Public class KKMultiServerThread(Socket socket)        {

   Private Socket socket = null;

 

   Public KKMultiServerThread(Socket socket)  {

               super(“KKMultiServerThread”);

               this.socket = socket;

   }

public void run()  {

   try        {

 

Weitergabe und Auslesen werden vorbereitet

 

   PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

   BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));          

 

   String inputline, outputline;  // Stringvariable deklarieren

   KnockKnockProtocol kkp = new KnockKnockProtocol();

 

Sendet an den Client ein Hallo zurück, wenn die Verbindung steht

 

outputline = “Hallo!”;

   out.println(outputline);

 

While ((inputline = in.readLine()) != null)           {  //liest die Daten vom Client ein in die Variable inputline

 

Übergibt den String vom Client an die Methode „leseData“ und bekommt einen String zurück

 

outputline = leseData(inputLine); 

 

Gibt den String von leseData auf der Server-Konsole aus und schickt den String an den Client zurück, bei einem „Bye“ wird das Programm beendet

 

System.out.println(outputLine);

out.println(outputLine);

if (outputLine.equals(“Bye”));

break;

   }         

   out.close();

   in.close();

   socket.close();

   }

   catch (IOException e)  {

               e.printStackTrace();

   }

}

 

 

public static String leseData(String filename)    

{

int c;

String satz = “”;   //Leerer String

try           {

 

Liest den String vom Client Schritt für Schritt in die Variable satz ein und gibt sie ,

wenn die Schleife fertig ist wieder an das Thread zurück

 

               FileReader f = new FileReader(filename); 

               while ((c = f.read()) != -1);  // read gibt immer “int” zurück, deshalb ist c int

               {

               satz = satz +(char)c;

               }

f.close();

}

 

catch (IOException e)

{

System.out.println(“Fehler beim Lesen der Datei”);

}

return satz;

}