Netzwerkprogrammierung Client/Server

Status
Nicht offen für weitere Antworten.

John_J

Mitglied
Hallo,

also wir haben an der Hochschule gelernt wie man server und client miteiander verbindet bzw wie sie miteinander kommunizieren können. Es wurde ein JavaCoding codiert diese dann ausgeführt, und dann über cmd , den Localhost + portnr angegeben ,dann wurde unser programm in der Eingabekonsole ausgeführt.


Jetzt wollte ich mich auf die Klausur vorbereiten..... nur funktioniert das mit Localhost bei mir nicht zuhause....

kann mir vielleicht einer helfen :-( ..... was muss ich den alles einstellen bzw installieren damit ich von zuhause aus üben kann.

Würd mich sehr freuen wenn mir einer helfen kann 🙂


Grüsse

John_J
 
Was funktioniert nicht? Den Client zu starten oder den Server? LocalHost an der Hochschule ist nicht zwangsläufig
LocalHost von deinem PC daheim, es kommt darauf an wie der Server aussieht. Ich glaube ohne Code kann man dir jetzt schwer weiterhelfen.
 
Das Problem ist einfach das ich über cmd Localhost eingeben kann aber der findet nichts..... " Der befehl ist entweder falsch geschrieben oder konnte nicht gefunden werden" .


Also an der hochschule haben wir einen ordner gehabt auf der festplatte da müssten wir die javadateien speichern und ausführen.... dann über cmd -> localhost + portnr:

z.b:

das hier

Code:
import java.net.*;
import java.io.*;

public class Network_6b    //TCPClient
{
   // Rechnername des Servers
   static String hostname = "Localhost";
   // Port des Servers
   static int port = 10001;

   public static void main (String[] args)
   {
      try
      {
         // Erzeugen der Socket und Aufbau der Verbindung
         Socket socket = new Socket (hostname, port);
         // Senden eines Namens
         socket.getOutputStream().write
                          ("Vorlesung Wirtschaftsinformatik".getBytes ());
         // Puffer erzeugen und auf Begrüßung warten
         byte[] b = new byte[128];
         InputStream stream = socket.getInputStream();
         int size = 0;
         while (size == 0)
         {
            size = stream.available();
         }

         // Berüßung lesen und ausgeben
         stream.read (b);
         System.out.println ("Empfangen: " +
         new String (b, 0, size));
         // Verbindung beenden
         socket.close();
      }
      catch (Exception e)
      {
         // Wenn ein Fehler auftritt ...
         e.printStackTrace();
      }
   }
}
 
Und wie sieht der Server aus? Erstellt du dann dort nen ServerSocket? Welchen Port haste ihm denn gegeben?
Und localhost ist glaub ich ein Linux-Command und kein gültiges Programm von Windows. Oder was nutzt du/Hochschule?
Gib mal ipconfig ein und starte den Client mal mit der IP die dir dort angezeigt wird.
 
hier ein anderes beispiel :-(

will das ausführen aber bekomme das irgendwie zuahuse nicht hin....
Wir benutzen in der schule xp.... zuhause benutze ich auch xp.
In der schule sind wir einfach eingabeaufforderung(cmd) gegangen localhost + portnr
dann wurde es ausgeführt.

Code:
import java.io.*;
import java.net.*;

 public class Network_2a
    //EchoServer
 { public static void main( String[ ] arg ) throws Exception
      { ServerSocket  s = new ServerSocket( 8189 );
        Socket incoming;
        while( true)
         {
           incoming = s.accept( );

           BufferedReader in = new BufferedReader
                 ( new InputStreamReader( incoming.getInputStream( )));
               PrintWriter out = new PrintWriter( incoming.getOutputStream( ),true );
               out.println( "Hello, BYE eingeben zum beenden.");


            boolean done = false;
            while ( ! done )
             {
               String line = in.readLine( );
               if ( line == null ) done = true;
               else { out.println( "Echo: "  + line ) ;
                         if ( line.trim( ).equals( "BYE" ))  done = true;   }
             }
          incoming.close( );
        }
      }
    }
 
Was willst du dauernd mit deinem Localhost + Port 😉 Den Server startest du einfach so, er bestimmt den Port.
Und den Client führst du auf diesem Port aus. Du behandelst die Argumente ja gar nicht, es total egal was du
da übergibst beim Client-Aufruf, du könntest auch Apfelbaum hinschreiben. Kuck dir deinen Client doch mal an.
Er muss den gleichen Port haben wie der Server, du kannst nicht bei Server 8189 schreiben und beim Client 10001.

Und wenn du das so machen willst wie in der Uni musst du den Client dementsprechend umschreiben, dass
er auch was mit den übergebenen Argumenten macht:

Code:
/* IM CLIENT */
 public static void main (String[] args)
   {
      try
      {
         // Erzeugen der Socket und Aufbau der Verbindung
         String hostname = args[0];
         int port = Integer.parseInt(args[1]);
         Socket socket = new Socket (hostname, port); 
        
         // usw...

Und dann starten:

1) Server starten : java Network_2a
2) Client starten mit Server Port: java Network_6a localhost 8189

der String "localhost" ist dann args[0] und die Nummer 8189 ist args[1], das übergibst du dem Client beim Start.
 
Also: Starte den Server den du hier gepostet hast. Er hat ja den Port 8189.

Dann ändere in der Client-Datei die du vorhin gepostet hast den Port von 10001 nach 8189.

Und dann starte den Client, ohne irgendwelches komische LocalHost oder sonst was.

Und voila: Es geht. Was verstehst du denn jetzt nicht?
 
einfach mal das "Localhost" in ein "localhost" ändern würd ich vorschlagen ansonsten einfach "127.0.0.1" einfügen ....
 
Hallo,

also ich habe das mit Server/Client verbinden endlich hinbekommen


Code:
import java.io.*;
import java.net.*;


public class TCPServer
   { static int port = 10001;
     public static void main(String[] args) throws IOException
      { ServerSocket socket = new ServerSocket(port);
        Socket client = socket.accept( );
        System.out.println( "Verbunden mit"+client.getInetAddress().getHostName()+ "Port" + client.getPort());
        byte[ ] b = new byte[74];
        int off;
        InputStream stream = client.getInputStream( );
        /*int size = 0;
        while( size == 0) { size=stream.available( ); }   */


        stream.read(b);
        


        
        



     String message = new String(b);
        //String message="Halloooooooo";
        System.out.println("Nachricht empfangen" + message );
       client.close( );
       socket.close( );  }
   }


Code:
import java.io.*;
import java.net.*;

public class TCPClient
 { static String hostname = "Localhost";
   static int port = 10001;
   public static void main(String []args)
    { try
        { Socket socket = new Socket(hostname, port);
          socket.getOutputStream().write( "HalloServer2".getBytes( ) );
          
           for(int i=0; i<5; i++)
           {

            socket.getOutputStream().write(i);

           }

          socket.close();
         }
      catch ( UnknownHostException e ) { }
      catch ( IOException e )  { }
    }
 }



jetzt habe ich aber ein anderes Problem, was muss ich den genau hinschreiben damit mein Server zwischen String und int unterscheidet beim einlesen..... kann mir da einer vielleicht helfen
 
Dein Server bekommt immer nur Bytes. Was du dann damit anstellst ist dein / des Client ihm sein Bier.
Als einfache Lösung könntest du einfach erstmal die empfangenen Daten als String speichern und diesen dann mittels RegExp auf das Vorhandensein von Zahlen überprüfen. Natürlich gibt es auch Integer.parseInt(String), aber wenn da ein Buchstabe dabei ist, gibts ne Exception. Und bitte (evtl. nur meine Meinung) versuch das nicht in einen Try/Catch-Block zu packen und dadurch Programmlogik zu erzeugen. Das ist meines Erachtens nicht vorgesehen.
 
hi,

ist bei mir der ansatz schon falsch ? irgendwie habe ich noch nie was von RegExp gehört 🙁 gibts da keine leichteren Lösungen ?
 
Eins nach dem anderen.
Versuch doch erstmal vernünftige Client/Server Klassen zu schreiben, mit denen sich Daten austauschen lassen.

Danach kannst du dich darum kümmern, wie du erkennst ob da Strings oder Integer ankommen (regex oder andere Lösungen)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben