Witam.
Chciałem napsiać prosty serwer odbierający komendy od klienta i wykonywujący je. Klient łączy się normalnie do serwera, ale gdy zostanie wsyłana komenda, serwer nie reaguje. Wszystko jest robione w Delphi 7.
Kod Serwera:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, ScktComp, MMSystem, Sockets, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
TcpServer1: TTcpServer;
Button1: TButton;
ListBox1: TListBox;
procedure SerwerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SerwerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
X : string;
begin
X := TcpServer1.Receiveln();
if x = 'a' then begin
ListBox1.AddItem('Wykonano komendę A', TObject(4));
end;
end;
procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
ListBox1.AddItem('Polaczono...', TObject(3));
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button = mbLeft then
begin
ReleaseCapture;
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.AddItem('Wlaczono...', TObject(1));
ListBox1.AddItem('Oczekiwanie na polaczenie...', TObject(2));
end;
end.
Kod Klienta:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets;
type
TForm1 = class(TForm)
Klient: TTcpClient;
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Klient.RemoteHost := Edit1.Text;
Klient.Active := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Klient.Sendln('a');
end;
end.
Wysyłaną komendą jest litera "a" i serwer powinien zareagować dodając do ListBoxa "Wykonano komendę A". Gdzie leży błąd?