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
akariSiehe 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::OnReadvoid __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 nichtOnClick 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 istClientSocket1->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.comdann 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++)