Probleme mit ServerSocket
-
Hallo,
ich möchte mir einen kleinen Chat zusammen bauen und wenn sich die Clients verbinden, möchte ich das es beim Server (? betritt den Channel) steht.Ich hab das mal so gemacht:
Server:
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { RichEdit1->Lines->Add(""); RichEdit1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat."); }Client:
try { ClientSocket1->Host = "127.0.0.1"; ClientSocket1->Port = 80; ClientSocket1->Active = true; ServerSocket1->Socket->SendText(Edit1->Text); } catch(...) { }Das wird dann beim Server eingetragen:
<09:34:23> betritt den Chat.ich weiss jetzt nicht, ob ich das so richtig gemacht habe.
Ich danke euch schonmal für die hilfe.MfG
-
Hallo,
also zunächst will der Client den Text senden nicht der Server. Dazu musst du allerdings warten bis der Client mit dem Server verbunden ist. Die Events von TServerSocket / TClientSocket sind da nicht ganz uninteressant

void __fastcall TForm1::Button1Click(TObject *Sender) { // Mit dem Server verbinden ClientSocket1->Host = "127.0.0.1"; ClientSocket1->Port = 1111; ClientSocket1->Active = true; } void __fastcall TForm1::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) { // Wenn mit dem Server verbunden Text senden ClientSocket1->Socket->SendText("Silent Observer"); } void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { // Text empfangen und ausgeben Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat."); }oder:
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender, TCustomWinSocket *Socket) { // Bei eingehender Verbindung Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->RemoteAddress+" betritt den Chat."); }Im BCB gibt es auch ein komplettes Chatbeispiel ( \Examples\Internet\Chat )
mfg, Micha!
-
Vielen Dank für die Hilfe.
also, das mit RemoteAdress funktioniert, aber wieso wird der Nickname nicht ausgegeben beim Server, wenn der Client sich Connected?
Das hier wird ausgegeben:
<11:20:48> betritt den Chat.Der Nick ist hier nicht zusehen, woran kann das liegen?
EDIT: Ich hab das mal getestet, also nach dem 4ten mal einloggen wird der Nick erst gesendet, hab ich vll etwas vergessen?
MfG
-
RandomAccess85 schrieb:
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // Mit dem Server verbinden
ClientSocket1->Host = "127.0.0.1";
ClientSocket1->Port = 1111;
ClientSocket1->Active = true;
}void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{ // Wenn mit dem Server verbunden Text senden
ClientSocket1->Socket->SendText("Silent Observer");
}void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{ // Text empfangen und ausgeben
Memo1->Lines->Add("<"+TimeToStr(Time())+"> "+Socket->ReceiveText()+" betritt den Chat.");
}Hallo,
wie gesagt, erst Verbinden, dann senden
mfg, Micha!
-
Ich habe das ja so gemacht, also erst Verbinden und dann senden, leider geht das nicht.
Naja ich werd mal gucken ob ich den fehler finde.
Vielen Dank.MfG