Advanced   Java   Services
Sockets
Back Next Up Home



Einfache Server/Client Beispiele realisiert mit Sockets


Die folgenden Beispiele zeigen einfache Clients und Server. Es werden Daten vom Client zum Server geschickt. Der Server nimmt sie entgegen, schickt aber selbst keine Daten.


SimpleServerDemo1


/*
   der server wird immer zuerst gestartet und wartet auf den client

   diese server kann genau eine anfrage abfertigen
   er gibt die daten, die er vom client erhält auf die konsole aus
   sein inputstream erhält vom client ein EOF
   d.h. der client beendet die verbindung

   arbeitet zusammen mit SimpleClientDemo1
*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleServerDemo1
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         ServerSocket serverSocket = new ServerSocket(port);
         Socket clientSocket;

         System.out.println("server gestartet");
         System.out.println("warte auf anfrage");
         clientSocket = serverSocket.accept();
         // accept blockiert bis ein client eine TCP/IP-verbindung aufgebaut hat.

         InputStream is = clientSocket.getInputStream();
         System.out.println("inputstream opened");
         //OutputStream os = client.getOutputStream();
         //System.out.println("outputstream opened");

         int ch;
         // der server wartet bis der client die verbindung abbricht
         // die verbindung wird abgebrochen wenn der client EOF schickt
         System.out.println("erhalte die folgenden daten") ;
         System.out.println("--------------- begin ---------------") ;
         while( (ch=is.read())!=-1 )
         {
            System.out.print( (char)ch) ;
         }
         System.out.println() ;
         System.out.println("---------------- end ----------------") ;
         System.out.println("verbindung durch client beendet");

         is.close();
         clientSocket.close();
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   }
}


SimpleClientDemo1


/*
   dieser clientschickt genau einmal daten an den server
   der client schließt den outputstream und sendet damit
   ein EOF an den server und setzt damit die verbindung zurück

   ein clientSocket.close() schließt beide streams und sendet damit
   speziell auch ein EOF über den outputstream. das sieht man,
   indem man out.close() durch clientSocket.close() ersetzt.
   nach  clientSocket.close() kann man das socket nicht mehr verwenden

   arbeitet zusammen mit SimpleServerDemo1 oder SimpleServerDemo3
*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleClientDemo1
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         String host = "127.0.0.1";
         Socket clientSocket = new Socket(host, port);

         System.out.println("verbindung aufgebaut host = " + host + " port = " + port);

         OutputStream out = clientSocket.getOutputStream();
         System.out.println("outputstream opened");

         String data = "hello localhost";
         out.write( data.getBytes() );
         out.close(); // sendet EOF
         System.out.println("daten gesendet und stream geschlossen");
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   }
}


SimpleServerDemo2


/*
   dieser server kann genau eine anfrage abfertigen
   er gibt die daten, die er vom client erhält auf die konsole aus

   der inputstream des server erhält kein EOF, denn das würde
   bedeuten, daß der client die verbindung beendet. der server kann
   also nicht einfach bis EOF einlesen.

   stattdessen wird die methode available() verwendet.
   zunächst wird mit

   while( in.available() == 0 ) ;

   gewartet bis daten anliegen. auch der aufbau einer lokalen TCP/IP
   verbindung dauert einige zeit. das warten ist also notwendig.

   der server liest dann die daten ein und sendet über den
   outputstream ein EOF an den client und beendet damit die verbindung.

   arbeitet zusammen mit SimpleClientDemo2
*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleServerDemo2
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         ServerSocket serverSocket = new ServerSocket(port);
         Socket clientSocket;

         System.out.println("server gestartet");
         System.out.println("warte auf anfrage");
         clientSocket = serverSocket.accept();
         // accept blockiert bis ein client eine TCP/IP-verbindung aufgebaut hat.

         InputStream in = clientSocket.getInputStream();
         System.out.println("inputstream opened");
         OutputStream out = clientSocket.getOutputStream();
         System.out.println("outputstream opened");

         // warten bis daten anliegen !
         while( in.available() == 0 ) ;

         System.out.println("es liegen " + in.available() + " bytes an") ;
         System.out.println("erhalte die folgenden daten") ;
         System.out.println("--------------- begin ---------------") ;
         for( int ch=0; in.available() > 0; )
         {
            ch = in.read();
            System.out.print( (char)ch) ;
         }
         System.out.println() ;
         System.out.println("---------------- end ----------------") ;

         System.out.println("verbindung wird beendet");
         out.close();
         //clientSocket.close();
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   }
}


SimpleClientDemo2


/*
   diese client schickt einmal daten an den server
   der server beendet nach erhalt der daten die verbindung

   arbeitet zusammen mit SimpleServerDemo2 oder SimpleServerDemo4

*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleClientDemo2
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         String host = "127.0.0.1";
         Socket clientSocket = new Socket(host, port);

         System.out.println("verbindung aufgebaut host = " + host + " port = " + port);

         OutputStream out = clientSocket.getOutputStream();
         System.out.println("outputstream opened");
         InputStream in = clientSocket.getInputStream();
         System.out.println("inputstream opened");

         String data = "hello localhost";
         out.write( data.getBytes() );
         out.flush();
         System.out.println("daten gesendet");

         int ch = in.read();  // server schickt keine daten, nur EOF
         if (ch == -1)
            System.out.println("server hat verbindung beendet");
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   }
}


SimpleServerDemo3


/*
   der server wird immer zuerst gestartet und wartet auf den client

   dieser server kann mehrere anfragen abfertigen
   er gibt die daten, die er vom client erhält auf die konsole aus
   sein inputstream erhält vom client ein EOF
   d.h. der client beendet die verbindung
   nach dem beenden der verbindung wartet der server mit serverSocket.accept()
   auf einen neuen client und legt dann ein neues clientSocketobjekt an

   arbeitet zusammen mit SimpleClientDemo1

*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleServerDemo3
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         ServerSocket serverSocket = new ServerSocket(port);
         System.out.println("server gestartet");
         Socket clientSocket;

         for(;;)
         {
            try
            {
               System.out.println("warte auf anfrage");
               clientSocket = serverSocket.accept();
               // accept blockiert bis ein client eine TCP/IP-verbindung aufgebaut hat.

               InputStream is = clientSocket.getInputStream();
               System.out.println("inputstream opened");
               //OutputStream os = client.getOutputStream();
               //System.out.println("outputstream opened");

               int ch;
               // der server wartet bis der client die verbindung abbricht
               // die verbindung wird abgebrochen wenn der client EOF schickt
               System.out.println("erhalte die folgenden daten") ;
               System.out.println("--------------- begin ---------------") ;
               while( (ch=is.read())!=-1 )
               {
                  System.out.print( (char)ch) ;
               }
               System.out.println() ;
               System.out.println("---------------- end ----------------") ;
               System.out.println("verbindung durch client beendet");

               is.close();
               clientSocket.close();
            }
            catch(IOException ex)
            {
               System.out.println("Fehler "+ex);
            }
         } // end for
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   } // end main
}


SimpleServerDemo4


/*

   diese server kann mehrer anfragen abfertigen
   er gibt die daten, die er vom client erhält auf die konsole aus

   der inputstream des server erhält kein EOF, denn das würde
   bedeuten, daß der client die verbindung beendet. der server kann
   also nicht einfach bis EOF einlesen.

   stattdessen wird die methode available() verwendet.
   zunächst wird mit

   while( in.available() == 0 ) ;

   gewartet bis daten anliegen. auch der aufbau einer lokalen TCP/IP
   verbindung dauert einige zeit. das warten ist also notwendig.

   der server liest dann die daten ein und sendet über den
   outputstream ein EOF an den client und beendet damit die verbindung.

   arbeitet zusammen mit SimpleClientDemo2

*/
import java.io.*;
import java.net.*;
import java.util.*;

public class SimpleServerDemo4
{
   public static void main(String[] args)
   {
      try
      {
         int port = 888;
         ServerSocket serverSocket = new ServerSocket(port);
         System.out.println("server gestartet");
         Socket clientSocket;

         for(;;)
         {
            try
            {
               System.out.println("warte auf anfrage");
               clientSocket = serverSocket.accept();
               // accept blockiert bis ein client eine TCP/IP-verbindung aufgebaut hat.

               InputStream in = clientSocket.getInputStream();
               System.out.println("inputstream opened");
               OutputStream out = clientSocket.getOutputStream();
               System.out.println("outputstream opened");

               // warten bis daten anliegen !
               while( in.available() == 0 ) ;

               System.out.println("es liegen " + in.available() + " bytes an") ;
               System.out.println("erhalte die folgenden daten") ;
               System.out.println("--------------- begin ---------------") ;
               for( int ch=0; in.available() > 0; )
               {
                  ch = in.read();
                  System.out.print( (char)ch) ;
               }
               System.out.println() ;
               System.out.println("---------------- end ----------------") ;

               //in.close();
               System.out.println("verbindung wird beendet");
               out.close();
               //clientSocket.close();
            }
            catch(IOException ex)
            {
               System.out.println("Fehler "+ex);
            }
         } // end for
      }
      catch(IOException ex)
      {
         System.out.println("Fehler "+ex);
      }
   } // end main
}


top Back Next Up Home