Client- und ServerSocket



  • Hallo ich habe eine frage zu den sockets vom BCB6

    Wie sende ich einen Text an einen anderen Client bzw Server?

    ich verstehe das voll nicht ich weiß nicht mal wie man mit dem anderen Client/server verbindet und das beispiel in internet->chat verstehe ich auch nicht wirklich ich brauche dringend hilfe



  • 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



  • Hallo

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

    bis bald
    akari



  • 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 😡


Anmelden zum Antworten