Server sendet an Client



  • @hermes

    Dein Code funktioniert bei mir.
    Aber bei mir bekomme ich ne Fehlermeldung auf deinem Port.
    Mein Rechner meinte das der Port schon von einer andern Anwendung benutz wird.
    Du solltest mal den Port ändern.
    Versuche doch mal beispielsweise Port 80.
    Ich hoffe das bringt was.

    LG raven 🕶



  • raven_22 schrieb:

    Mein Rechner meinte das der Port schon von einer andern Anwendung benutz wird.

    Und genau das ist der Punkt! Jeder Socket belegt genau EINEN Port. D.h. Wenn dein Server den Port 5000 belegt, wird dein Client den nicht mehr nutzen können.



  • Das ist genau nicht der Punkt. 😉
    Lediglich bei Servern, d.h. Sockets im listen-Modus, kann es jeweils immer nur einen pro Port geben. Clients können auf diesen Port soviele zugreifen wie der Rechner resourcenmässig verkraftet. Dabei spielt es keine Rolle, ob der Client auf demselben Rechner läuft oder nicht.



  • Hmm ich war bisher der Ansicht, dass wenn ein Client und ein Socket auf dem selben Rechner den selben Port beanspruchen wollen, es nicht funktioniert.

    Hab leider ichts hier um das mal durchzutesten!



  • Hi ich bekomme fehlermeldung: Der Index der Liste überschreitet das Maximum(0);

    was bedeutet es?

    Gruß,
    S.mathi



  • smathi2002 schrieb:

    Hi ich bekomme fehlermeldung: Der Index der Liste überschreitet das Maximum(0);

    Wie wär's wenn du die Suche nutzt? Wie wärs wenn du nen eigenen Thread dazu aufmachst, als in einem zu posten, der aber auch rein gar nichts mit deinem Problem zu tun hat? 🙄

    Stichwort: Index out of Bounds



  • Ich habe nun einen Client sowie Server beide Port 5000 auf einem rechner
    zum laufen gebracht.
    Wenn der Server läuft und ich dann den Client starte kommt das Ereigniss ClientConnect beim Server.
    Nun kann ich Daten vom Client zum Server senden.
    Benutze ich allerdings für den Client einen zweiten Rechner der über einen DSL Router verbunden ist funkt es nicht mehr obwohl ich an den Led's des
    Routers einen Zugriff auf das Lan Netz sehe.
    Ich kann auch keine anderen Ports nutzen, dann kommt immer die Fehlermeldung
    "Der Wert kann nicht geändert werden, während der Socket aktiv ist" beim Server.
    Übrigens hat der Server den Port 5000 lauscht er nach allen Clients die
    den selben Port haben.

    Folgendes funktioniert:

    //-----------------------------------------------
    // Client
    //-----------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
         ClientSocket1->Port = 5000;
         ClientSocket1->Address = "192.168.2.101";     //IP des Clients
         ClientSocket1->Host    = "192.168.2.100";	   //IP des Servers
         ClientSocket1->Active = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
         ClientSocket1->Socket->ReceiveBuf(&a,2);		//Daten vom Server
         Edit1->Text = a;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
         test = TrackBar1->Position;
         Edit1->Text = TrackBar1->Position;
         ClientSocket1->Socket->SendBuf(&test,2);		//Daten zum Server
    }
    
    //-------------------------------------------------------
    // SERVER
    //-------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
         ServerSocket1->Port = 5000;
         ServerSocket1->Active = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
        Form1->Edit1->Text = "CONNECT";			//Sobald Client startet tritt das Ereigniss auf
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
         Socket->ReceiveBuf(&test,2);			//Daten vom Client 	
         Edit2->Text = test;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
         test = TrackBar1->Position;
         ServerSocket1->Socket->Connections[0]->SendBuf(&test,2); //Daten zum Client
    }
    

    Habe aber immer noch ein Problem wenn ich einen anderen Port wähle



  • Du musst den Port 5000 "Forwarden" sprich freigeben, sonst wird er von deinem Router blockiert.



  • Hallo hermes,
    in der Hilfe zum Client habe ich gelesen:
    "Die Eigenschaft Host ist ein Alias für die IP-Adresse des Server-Systems.
    Die Eigenschaft Address bezeichnet die IP-Adresse des Server-Systems."

    Hieraus schliesse ich, dass sich beide Eigenschaften auf den Server beziehen. In deinem Code ist das etwas anders

    //-----------------------------------------------
    // Client
    //-----------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
         ClientSocket1->Port = 5000;
         ClientSocket1->Address = "192.168.2.101";     //IP des Clients
         ClientSocket1->Host    = "192.168.2.100";       //IP des Servers
         ClientSocket1->Active = true;
    }
    

    Bin mir nicht sicher ob das ein Grund mit ist.
    Evi48



  • Hallo evi48,

    ClientSocket1->Address = "192.168.2.101"; //IP des Clients
    ist die Host Adresse des Clients

    ClientSocket1->Host = "192.168.2.100"; //IP des Servers
    ist die Host Adresse des Servers.

    Ich habe heute auf der Arbeit im LAN ein wenig rumprobiert und habe
    eine von mir programmierte Testsoftware mit einem ClientSocket versehen.
    Auf einem anderen Rechner lief ein Server mit dem ich die Testsoftware
    über LAN Fernsteuern konnte.
    Da die ganze Sache funktionierte also sind die Angaben oben richtig.

    Allerdings versuche ich das ganze im WAN und nicht im LAN, leider klappt
    das nicht.
    ClientSocket->Adresse = "meine WAN IP"
    ClientSocket->Host = "WAN IP eines Kollegen"

    Ich muss dazu sagen das ich hinter einem DSL Router hänge.



  • Checkliste

    1. hast du den Hinweis von PuppetMaster2k befolgt und den router konfiguriert ?
    2. hast du versucht mit ping eine Verbindung zu testen ?
    3. hast du einen anderen port versucht?



  • ich habe mir ein client-server programm geschrieben, das übers netz (im geschäft durchs ganze Netzwerk) und aber auch übers internet funktioniert
    dabei ist meine "einzige" angabe

    ClientSocket1->Host = IP;
    

    wobei ich aber

    ClientSocket1->Adress
    

    nichts zuweise.

    [edit] Port wird natürlich auch angegeben [/edit]



  • Die Frage ist jetzt, willst du damit übers Internet (WAN) eine Verbindung aufbauen oder über das W-LAN? Wenn übers Internet, dann kommst du mit deiner lokalen IP nicht weit, weil du dann die IP, die dir dein Provider zugewiesen hat, benötigst.

    Wenn du übers W-LAN gehn willst, dann geh so vor, wie AndreasW schon sagte!



  • AndreasW schrieb:

    Checkliste

    1. hast du den Hinweis von PuppetMaster2k befolgt und den router konfiguriert ?
    2. hast du versucht mit ping eine Verbindung zu testen ?
    3. hast du einen anderen port versucht?

    Bei dem Router habe ich die Firewall disabled.
    Die Verbindung wurde mit Ping getestet.
    Allerdings habe ich als "Client Host Adresse" die Adresse des Rechners und nicht die WAN IP angegeben, ist das vieleicht das Problem?



  • PuppetMaster2k schrieb:

    Die Frage ist jetzt, willst du damit übers Internet (WAN) eine Verbindung aufbauen oder über das W-LAN? Wenn übers Internet, dann kommst du mit deiner lokalen IP nicht weit, weil du dann die IP, die dir dein Provider zugewiesen hat, benötigst.



  • Ich habe ein Problem mit dem Begriff W-LAN.

    LAN-> LOCAL ARRAY NET //Intranet
    WAN-> WIDE ARRAY NET //Internet
    W-LAN-> ?????WIDE-LOCAL ARRAY NET oder Wireles-LAN ??????



  • Das A steht für Area. Das "W-LAN" ist PuppetMaster2k bestimmt nur so rausgerutscht, er meinte mit Sicherheit WAN.
    W-LAN bzw. WLAN bedeutet Wireless LAN.

    Mit dem Problem hat das aber nicht wirklich etwas zu tun, und das Problem hat eigentlich auch nichts mehr mit dem BCB zu tun.
    Du musst deinen DSL-Router so konfigurieren, dass er Anfragen, die auf einem bestimmten Port (hier 5000) hereinkommen, an den Rechner im lokalen Netz weiterleitet, auf dem deine Serveranwendung läuft. Das ist das sogenannte port forwarding, das PuppetMaster2k bereits erwähnte.



  • Würde diese Programm auch funktionieren, wenn man ein PocketPc hat der über WLan Daten verschickt? Ich probiere grade das Programm aus, was hier gepostet wurde, aber ich bekomme keine Verbindung zustande. Das Programm auf dem PocketPc wurde mit Microsoft eVC++4.0 geschrieben. Kann es sein das Microsoft und Borland nicht zusammen funktionieren ??

    mfg devilempire81


Anmelden zum Antworten