socket超时设置怎样设置? 怎样设置socket的超时设置?在clientsocket,还是serversocket中设置? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //Unit1.pasunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp, MyThread;type TMainForm = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } tmBegin : TTime; CT: TMyThread; CTActive: Boolean; public { Public declarations } end;var MainForm: TMainForm;implementation{$R *.dfm}procedure TMainForm.Button1Click(Sender: TObject);var iTimeOut: Integer;//从Open到现在经过的秒数begin CT := TMyThread.CreateIt; tmBegin := Time; CTActive := True; CT.Resume; while (CT <> nil) and (CTActive) and (not CT.CS.Active) do begin iTimeOut := StrToInt(FormatDateTime('ns' , Time - tmBegin)); if iTimeOut >= 5 then//超时5秒 begin CT.Terminate; MessageBox(Handle, PChar('因为超时,无法连接到目的计算机.'), '连接失败...', MB_ICONERROR); Exit; end; end;end;procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);begin if CT <> nil then CT.Terminate;end;end.//MyThread.pasunit MyThread;interfaceuses Classes, comctrls, ScktComp, Dialogs;type TMyThread = class(TThread) private FCS: TClientSocket; procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket); procedure CSError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); protected procedure Execute; override; public constructor CreateIt; destructor Destroy; override; published property CS: TClientSocket read FCS write FCS; end;var MyThread1: TMyThread;implementation{ TMyThread }constructor TMyThread.CreateIt;begin Inherited Create(False); FCS := TClientSocket.Create(nil);end;procedure TMyThread.CSConnect(Sender: TObject; Socket: TCustomWinSocket);begin ShowMessage('Connected!');end;procedure TMyThread.CSError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);begin ErrorCode := 0; case ErrorEvent of eeConnect: showMessage('Error in connecting'); else end;end;destructor TMyThread.Destroy;begin if FCS.Active then FCS.Close; FCS.Free; inherited Destroy;end;procedure TMyThread.Execute;begin with FCS do begin OnConnect := MyThread1.CSConnect; OnError := MyThread1.CSError; ClientType := ctBlocking; Address := '111.111.111.111'; Port := 9999; Open; end;end;end. 如果快速读取图片到图片框 一个小问题 写了个找凶手的题目 不知道错在那里??? 一个SetupBuilder Professional打包工具的小问题!! StringGrid里在第一列插入一个图标,但是图标大小怎么控制?? 在调试程序时,如何避免调试某一个pas文件? 加密狗的外壳加密程序,能否对数据库进行加密? (SQL) TApdcomport 初学delphi,请问delphi中有没有静态变量,就像vb中的static 如何传递数组的地址,以便用到整个数组元素 Delphi 7 中注册表操作 TRegistry 升角,散分(内含非常规笑话)
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, MyThread;type
TMainForm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
tmBegin : TTime;
CT: TMyThread;
CTActive: Boolean;
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation
{$R *.dfm}
procedure TMainForm.Button1Click(Sender: TObject);
var
iTimeOut: Integer;//从Open到现在经过的秒数
begin
CT := TMyThread.CreateIt; tmBegin := Time;
CTActive := True;
CT.Resume; while (CT <> nil) and (CTActive) and (not CT.CS.Active) do
begin
iTimeOut := StrToInt(FormatDateTime('ns' , Time - tmBegin)); if iTimeOut >= 5 then//超时5秒
begin
CT.Terminate;
MessageBox(Handle, PChar('因为超时,无法连接到目的计算机.'), '连接失败...', MB_ICONERROR);
Exit;
end;
end;
end;procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if CT <> nil then CT.Terminate;
end;end.//MyThread.pas
unit MyThread;interfaceuses
Classes, comctrls, ScktComp, Dialogs;type
TMyThread = class(TThread)
private
FCS: TClientSocket;
procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CSError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
protected
procedure Execute; override;
public
constructor CreateIt;
destructor Destroy; override;
published
property CS: TClientSocket read FCS write FCS;
end;var
MyThread1: TMyThread;implementation{ TMyThread }constructor TMyThread.CreateIt;
begin
Inherited Create(False);
FCS := TClientSocket.Create(nil);
end;procedure TMyThread.CSConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Connected!');
end;procedure TMyThread.CSError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
case ErrorEvent of
eeConnect: showMessage('Error in connecting');
else
end;
end;destructor TMyThread.Destroy;
begin
if FCS.Active then FCS.Close;
FCS.Free;
inherited Destroy;
end;procedure TMyThread.Execute;
begin
with FCS do
begin
OnConnect := MyThread1.CSConnect;
OnError := MyThread1.CSError;
ClientType := ctBlocking;
Address := '111.111.111.111';
Port := 9999;
Open;
end;
end;end.