![]() |
Wo ist der Fehler??? Sendtext-Problem
Ich habe ein Problem mit einer Client-Server-Verbindung. Unter benutzung der TClientSocket und TServerSocket einen Server gemacht und einen Clienten. Kein Problem mit dem Verbinden Selber, der Server zeigt auch die Verbindung an, also kein problem. Aber sobald ich mit dem Clienten einen Text (mit senttext) schicke kackt alles ab :wall: : die Verbindung bricht ab und ich bekomme die Fehlermeldung (beim Clienten), dass das Senden verhindert wurde, weil die verbindung abgebrochen wurde.
Hier Der Code von Clienten: (Button2 soll 'reconnect' sein, ist aber irrelevant)
Delphi-Quellcode:
Der Server müsste eigentlich auch ok sein: (Button1 soll 'restart' sein, hier auch wieder irrelevant)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp, ExtCtrls; type TForm1 = class(TForm) Client: TClientSocket; Edit1: TEdit; Button1: TButton; Button2: TButton; Panel1: TPanel; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Client.Socket.SendText('hallo'); end; procedure TForm1.Button2Click(Sender: TObject); begin Client.Active := false; Client.Active := true; end; procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin showmessage('Error!!!!!'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin If Client.Socket.Connected = true then panel1.Caption := 'connected' else panel1.Caption := 'not connected'; end; end.
Delphi-Quellcode:
Hoffe es kann mir jemand helfen, bin hier am verzweifeln :cry:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Scktcomp, StdCtrls; type TForm1 = class(TForm) Server: TServerSocket; Memo1: TMemo; Button1: TButton; procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); procedure ServerAccept(Sender: TObject; Socket: TCustomWinSocket); procedure ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket); var msg: string; begin server.Socket.Read(1); msg := server.Socket.ReceiveText; memo1.Lines.Add(msg); end; procedure TForm1.ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add('Client connected!!!'); end; procedure TForm1.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add('Client disconnected!!!'); end; procedure TForm1.Button1Click(Sender: TObject); begin Server.Active := false; server.Free; sleep(500); Server.Active := true; server.Open; end; procedure TForm1.ServerAccept(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add('Accepted'); end; procedure TForm1.ServerClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin memo1.Lines.Add('ClientError!'); end; end. PS: Ich habe schon bei verwandten themen geguckt aber nichts konnte mich weiterbringen. |
Re: TClientSocket und Sendtext-Problem
1. Beim Client: Warum einen Timer um den Status anzuzeigen? Nutze OnConnect und OnDisconnect um das Panel abzuändern!
2. Beim Server: Was soll diese hier bewirken bzw. was für ein Sinn sollte es haben im OnClientRead?
Delphi-Quellcode:
????
server.Socket.Read(1);
3. Beim Server: Du gibst die Komponente frei im Button1Click, somit ist die Komponente nicht mehr existent - wie kommst du nur auf diese Idee?
Delphi-Quellcode:
4. Beim Server: Die Methode Open bei den beiden Socket Komponenten macht nix anderes als Active auf True zu setzen. Daher kannst du dich auf eins von beiden einigen im Button1Click - beides hilft nix (Viel hilft viel Pack...aber nicht hier)
server.Free;
|
Re: Wo ist der Fehler??? Sendtext-Problem
Danke für deine Antwort!
Nur die vier von dir genannten sachen sind nur verbesserungsvorschläge und haben nichts mit dem eigentlichen Problem zu tun. Zu punkt 2: DU hast recht, das bringt echt gar nichts, war nur zum ausprobieren^^. Habe es wieder weg gemacht, geht aber trotzdem nicht :( *Wiederholte Bitte um Hilfe* *gaaaaaanz lieb guck* ^^ |
Re: Wo ist der Fehler??? Sendtext-Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Hi.
Kann es sein, dass du vergessen hast deine Delphi Version anzugeben? Die Hinweise von Thomas solltest du übrigens nicht so abtun - das sind ganz handfeste Fehler in deinem Code. Im Anhang findest du eine kleine Demo. Grüße vom marabu |
Re: Wo ist der Fehler??? Sendtext-Problem
Zitat:
|
Re: Wo ist der Fehler??? Sendtext-Problem
lol, ja ok. Du hast da schon recht, ich meine das nur so: wenn ich den server einfach nur starte, den clienten verbinde und versuche den text zu senden, gehts nicht. Ich klicke bei dem server nicht auf reconnect, also wäre das nur dann zu beachten, aber du hast schon recht und gut dass du es mir sagst, denn früher oder später müsste ich das sowieso bearbeiten :wink: .
@marabu: vielen dank für deine demo, ich hatte bis jetzt noch keine zeit es mir richtig anzugucken, werde ich aber möglichst bald tun. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz