Client- und ServerSocket



  • Rostfrei[] schrieb:

    Dieses Thema scheint heute sehr beliebt zu sein...

    Für die Kommunikation über LAN oder WAN benötigst Du einen Client- und einen Serversocket.

    Beide Komponenten müssen dem selben Port nutzen. Während der Designzeit kannst Du schon Active des Servers auf true setzten, d.h., dass der Server wenn das Prog gestartet wird aktiv ist und auf eingehende Verbindungen wartet.

    Den Client kannst Du z.B. durch einen Buttonklick mit Connect() verbinden. Dabei musst Du die IPAdresse des Servers angeben.

    Zum Senden siehe folgendes:
    Client:

    ClientSocket1->Socket->SendText("Hello world");
    

    Server:

    int Verbindungen = ServerSocket1->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket1->Socket->Connections[x]->SendText("Hello world);
    

    Auf der anderen Seite muss der Text entsprechend ausgelesen werden.

    Gruss

    Danke ich werde es sofort probieren

    akari schrieb:

    Hallo

    siehe dazu auch das mitgelieferte Chat-Beispiel unter <BCB-Path>\Examples\Internet\Chat.

    bis bald
    akari

    Siehe auch meinen ersten post ich werde aus dem beispiel nicht wirklich schlau deshalb frage ich hier



  • also wenn vom client ein text an den server geschickt wird wie kann ich den dort verarbeiten? z.b. so das er in ein Label angezeigt wird



  • Du musst das Ereignis ClientRead des Servers abfangen:

    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
          // Server liest aus, d.h. Client hat geschrieben
          AnsiString ClientWrittenText = Socket->ReceiveText();
          // Ausgabe verarbeiten
          Dosomething(ClientWrittenText);
          // Ausgabe auf Label
          Label1->Caption = ClientWrittenText; 
    }
    


  • Hallo

    hast du denn das Beispiel überhaupt mal gestartet und die BCB-Hilfe zu den einzelnen Teilen durchgeschaut? Es sind ja doch nur ein dutzend Zeilen, die sollten doch überblickbar sein.
    Das Auslesen empfangener Daten übernimmt der Event T...Socket::OnRead

    void __fastcall TChatForm::ServerSocketClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      Memo2->Lines->Add(Socket->ReceiveText());  
    }
    

    bis bald
    akari



  • hab noch ein problem...mein client kann nicht auf den server connecten
    liegt wohl hierdran was ist falsch ich finde den fehler nicht

    OnClick auf Button

    ClientSocket1->Active=true;
    int verbinden = StrToInt(Edit2->Text);
    ClientSocket1->Socket->Connect(verbinden);
    


  • hab fehler gefunden

    ClientSocket1->Active=true; 
    int verbinden = StrToInt(Edit2->Text); 
    ClientSocket1->Socket->Connect(verbinden);
    

    ist ja auch logisch irgendwie 😉
    dennoch ist die IP kein gültiger Integerwert aber wie soll es denn sonst gehen?



  • Connect benötigt keinerlei Parameter:

    Es muss sichergestellt sein, dass der Server aktiv ist und das Client und Server auf dem gleichen Port laufen!

    ClientSocket1->Host = "localhost"; // oder eine IPAdresse
    ClientSocket1->Connect();
    


  • ClientSocket1->Host = Edit2->Text;
    ClientSocket1->Connect();
    ClientSocket1->Active=true;
    

    so gehts net
    Fehler ist das Connect kein Element von ClientSocket1 ist

    ClientSocket1->Host = Edit2->Text;
    ClientSocket1->Socket->Connect();
    ClientSocket1->Active=true;
    

    so auch net
    Fehler ist das zu wenig Parameter für Connect eingegeben wurde



  • Sorry, mein Fehler. Connect ist bei Indy. Du benötigst Open()

    ClientSocket1->Host = Edit2->Text;
    ClientSocket1->Open();
    

    Das Active musst Du weglassen, da Open() automatisch Active auf true setzt. Schau einfach in der Hife nach.



  • SUPPPPEEEER FUNKTIONIIIERT
    danke danke danke danke ^^



  • Wie bekommt man die IP raus? xD



  • FALLS das hier das richtige ist:
    http://www.whatismyip.com

    dann kommt eine fehlermeldung...
    "Asynchroner Socket-Fehler 10060"



  • LAN-IPs findest Du z.B. über die Eigenschaft LocalIP des Powersock-Objektes auf der Komponentenpalette Indy. WAN-IPs kannst Du nur direkt über das Internet ermitteln; d.h. Du rufst von Deinem Prog eine Internetseite auf, die die aktuelle IP anzeigt. Die Ausgabe dieser Internetseite leitest Du direkt in Dein Programm um und kannst dann damit arbeiten. Zur Not kannst Du Dir so eine Homepage auch direkt mit PHP programmieren. Der Befehl RemoteIP liefert die benötigte Adresse.

    LAN:

    ShowMessage("Eigene IP Adresse:\n" + Powersock1->LocalIP);
    

    Gruss



  • Das Problem ist ich habe kein Indy

    Indy 10 läuft bei mir irgendwie nicht und Indy 9 finde ich nirgends zu downloaden



  • Auf der Seite von Indy??

    http://www.indyproject.org/Sockets/Download/Borland.en.iwp

    Das Indy 10 nicht mit dem Builder läuft ist allg. bekannt



  • Aber ich kann 9.0.18 nicht selbst installieren da ich nicht weiß wie das geht und es ist auch nicht diese BAT datei dabei die bei 9.0.17 war soweit ich weiß 😞



  • Es wäre ja mal schön die Fragen richtig zu stellen:

    Zwischen

    "Ich finde die Version/Download nicht"
    und
    "Ich kann es nicht installieren"

    ist ein erheblicher Unterschied 😡



  • yo eben
    Ich hab das letzte woche gedownloaded aber da war die .bat datei nicht bei
    dann habe ich 9.0.17 versuhct zu downloaden aber es ging nicht weil der download offline ist
    und ich finde keinen download für 9.0.17 😉
    so besser? 😉



  • Was hast Du denn für eine BCB-Version?

    Wurde Indy nicht mal auf den BCB-CDs mitgeliefert?



  • Und das

    http://www.indyproject.org/KB/

    hilft auch nicht?

    Wurde Indy nicht mal auf den BCB-CDs mitgeliefert?

    Als BCB6 herauskam, wurde die 4er oder 5er mitgeliefert. Im BCB 2006 ist 9er und 10er dabei und wir auch installiert (die 10er nicht für C++)


Anmelden zum Antworten