附上解决了的代码
procedure TForm1.FormCreate(Sender: TObject);
begin
T_Send.Interval:=1000;
T_Send.Enabled:=True;
ConnUse:=True; //这个是全局的
end;
procedure TForm1.T_CliTimer(Sender: TObject);
begin
if ConnUse then //判断客户端Disconnect方法是否执行完
begin
if not ClientSocket.Active then
begin
ClientSocket.Open;
end
else
begin
T_Send.Enabled:=False;
end;
ConnUse:=False; //每次执行都将初始化Disconnect方法执行状体
end;
end;
procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
T_Send.Enabled:=True;
ErrorCode:=0;
Socket.Close;
end;
procedure TForm1.ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ConnUse:=True;
end;
procedure TForm1.ClientLookup(Sender: TObject;
Socket: TCustomWinSocket);
var
Bo_Dontlinger : BOOL;
begin
Bo_Dontlinger := True;
SetSockOpt(Socket.SocketHandle, SOL_SOCKET, SO_DONTLINGER, @Bo_Dontlinger, sizeof(BOOL));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
T_Cli.Interval:=1000;
T_Send.Enabled:=True;
end;
procedure TForm1.T_CliTimer(Sender: TObject);
begin
if not ClientSocket.Active then
begin
ClientSocket.Open;
end
else
begin
T_Send.Enabled:=False;
end;
end;
procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
T_Send.Enabled:=True;
ErrorCode:=0;
Socket.Close;
end;