самому интересно почему так происходит)
вот создал простейший пример с такой же бякой:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ScktComp, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Close;
ClientSocket1.Port:=80;
ClientSocket1.Host:='noname';
ClientSocket1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Close;
ClientSocket1.Port:=1234;
ClientSocket1.Host:='localhost';
ClientSocket1.Open;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Add(SysErrorMessage(ErrorCode));
ErrorCode:=0;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('ClientConnect');
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('ClientDisconnect');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port:=1234;
ServerSocket1.Open;
end;
end.
проблема:
при нажатии Button2 клиент сразу же подключается к серверу (в Memo1 выводится ClientConnect)
но если сначала нажать Button1, то естественно (через некоторое время ~3сек) происходит ClientSocket1Error, и если жмем Button2, то по идее должно быть все ок, но опять получаем ClientSocket1Error.
почему?
проверено на XP и 7, лицензии со всеми обновлениями
--
я всегда использую блокируемые сокеты (тут ctNonBlocking), поэтому раньше с таким не встречался