Thema: Delphi ServerSocket1ClientRead

Einzelnen Beitrag anzeigen

DelphiSourcer

Registriert seit: 7. Feb 2005
43 Beiträge
 
Delphi 2006 Professional
 
#11

Re: ServerSocket1ClientRead

  Alt 26. Sep 2006, 12:14
Hallo Delphi Freunde!

Bin grad dabei, mich mit WinSockets zu besch„ftigen. IN DSDT gibt es dazu ein Handbuch und ein
Programmbeispiel. Das habe ich mir runtergeladen, um jetzt damit experimentieren zu können.
Leider habe ich ein Problem, das ich selber nicht so schnell lösen kann. Hier zuerst der Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    btnSend: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure btnSendClick(Sender: TObject);
    procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    Client: TClientSocket;
    Server: TServerSocket;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnStartClick(Sender: TObject);
begin

  Server.Port:=44044;
  Client.Port:=44044;
  Client.Host:='127.0.0.1'; //Localhost
  Server.Open;
  Client.Open;

end;

procedure TForm1.btnStopClick(Sender: TObject);
begin

  Client.Close;
  Server.Close;

end;

procedure TForm1.btnSendClick(Sender: TObject);
begin

  if Client.Active = true then
  begin
     Client.Socket.SendText(Edit1.Text);
     Edit1.Text:='';
     ServerClientRead(Sender,Client);
  end;
end;

procedure TForm1.ServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin

  Memo1.Lines.Add(Socket.ReceiveText);

end;

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin

  Memo1.Lines.Add('***Connected.')

end;

procedure TForm1.ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

  Memo1.Lines.Add('***Disconnected.');

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Client := TClientSocket.Create(self);
   Server := TServerSocket.Create(self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   Client.Free;
   Server.Free;
end;

end.
Wenn ich das Ereignis Senden auslöse <btnSendClick>, will ich den gesendeten Text im Memo sehen.
Warum ist in diser Methode der Aufruf von ServerClientRead() so wie oben nicht richtig? Wenn ich
btnSend anklicke, erhalte ich eine EAccessViolation. Muss ich vielleicht noch eine Connect-Methode
aufrufen, die im Beispiel nicht erwähnt, aber in den Tiefen der Socket-Klasse verborgen ist?

DelphiSourcer
  Mit Zitat antworten Zitat