Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Wo ist der Fehler??? Sendtext-Problem (https://www.delphipraxis.net/61519-wo-ist-der-fehler-sendtext-problem.html)

Amo 22. Jan 2006 15:09


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:
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.
Der Server müsste eigentlich auch ok sein: (Button1 soll 'restart' sein, hier auch wieder irrelevant)
Delphi-Quellcode:
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.
Hoffe es kann mir jemand helfen, bin hier am verzweifeln :cry:

PS: Ich habe schon bei verwandten themen geguckt aber nichts konnte mich weiterbringen.

Muetze1 22. Jan 2006 17:21

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:
server.Free;
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)

Amo 22. Jan 2006 21:02

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* ^^

marabu 22. Jan 2006 21:30

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

Muetze1 23. Jan 2006 08:00

Re: Wo ist der Fehler??? Sendtext-Problem
 
Zitat:

Zitat von Amo
Nur die vier von dir genannten sachen sind nur verbesserungsvorschläge und haben nichts mit dem eigentlichen Problem zu tun.

Mit anderen Worten: Du verstehst überhaupt nicht, was du machst, oder? Sonst würde dir der 3. Punkt im Normalfall einen Stich ins Herz bereiten und nicht so locker als "Verbesserungsvorschlag" abgetan werden.

Amo 23. Jan 2006 13:01

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