Показать сообщение отдельно
  #11  
Старый 07.09.2010, 18:42
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

самому интересно почему так происходит)
вот создал простейший пример с такой же бякой:
Код:
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), поэтому раньше с таким не встречался
Ответить с цитированием