Entwickler-Ecke
Internet / Netzwerk - Einseitiger Chat funktioniert nicht
elron - So 11.09.05 12:47
Titel: Einseitiger Chat funktioniert nicht
Also, ich hab erst grade angefangen mit Delphi zu programmieren, deshalb wollte ich mal was fragen:
Ich habe versucht, einen sehr simplen einseitigen Chat zu realisieren, dazu habe ich folgendes verwendet:
Client:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; ClientSocket1: TClientSocket; procedure Button1Click(Sender: TObject); procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Active := true; ClientSocket1.Socket.Sendtext(Edit1.Text); end; |
Server:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TServer = class(TForm) ServerSocket1: TServerSocket; Memo1: TMemo; procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure TServer.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin s := Socket.ReceiveText; Memo1.Lines.add(s); end; |
Nur habe ich das Problem, dass wenn ich versuche, etwas zu senden, das erst beim zweiten Mal senden ankommt.
Harry M. - So 11.09.05 12:55
:welcome: im DF!!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Host := 127.0.0.1; ClientSocket1.Port := 99; ClientSocket1.Open;
ClientSocket1.Socket.Sendtext(Edit1.Text); end; |
elron - So 11.09.05 13:10
habs fast hingekriegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin ClientSocket1.Socket.Sendtext(Edit1.Text); ClientSocket1.Close; end; |
und
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Host := '127.0.0.1'; ClientSocket1.Port := 99; ClientSocket1.Open; end; |
nur weiß ich nicht, womit man abfragen kann, ob der verbunden ist, geht das vl. über "if ClientSocket1.Open = true" oder "if ClientSocket1.Connected = true" oder wodrüber?
ach ja, und nochmal danke!
Harry M. - So 11.09.05 13:35
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| public ConnectError: Boolean; end;
procedure Delay(dwMilliseconds: Longint); var iStart, iStop: DWORD; begin iStart := GetTickCount; repeat iStop := GetTickCount; Application.ProcessMessages; until (iStop - iStart) >= dwMilliseconds; end;
procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ConnectError := ErrorCode <> 0;
ErrorCode := 0; end;
procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Host := 127.0.0.1; ClientSocket1.Port := 99; ClientSocket1.Open; while (ClientSocket1.Socket.Connected = FALSE) and (ConnectError = FALSE) do Delay(10);
if ConnectError then ClientSocket1.Socket.Sendtext(Edit1.Text); else showmessage('Geht nich :-(');
end; |
elron - So 11.09.05 14:20
Delphi-Quelltext
1: 2:
| procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); |
der sagt mir beim compilieren ClientSocket1Error undefinierter Bezeichner
Harry M. - So 11.09.05 21:29
Da stimmt was mit den Deklartionen nicht oder die Proc hat die falsche Bezeichnug. Ist auch teilweise aus meinen Chat den ich mal vor ein paar Tagen gemacht habe. Kann sein das das bei Dir nicht ganz so funtz wie soll. Ich würde mal vorschlagen schicks mal via PN dann kuck ich mal schnell rein.
marconist - Sa 17.09.05 15:06
Hallo elron,
Der Aufruf von sendtext erfolgt bei dir so früh, dass das Aktivieren noch nicht fertig ist.
So lässt du das Programm darauf warten, bevor es weiter geht:
Delphi-Quelltext
1: 2: 3:
| ClientSocket1.Active := true; repeat application.ProcessMessages; until clientsocket1.Active; ClientSocket1.Socket.Sendtext(Edit1.Text); |
Das habe ich getestet, es funktioniert und kann an deine Bedürfnisse angepasst werden.
srs
marconist
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!