一段用Socket连接的程序。(WSAStartup(MakeWord(1,1),WSA);)已经初始化了,
var
Sock : TSocket;
ErrorCode : integer;
Server : TSockaddr;
begin
Result := False;
Server.sin_family:=AF_INET;
Server.sin_port:=htons(Port);
Server.sin_addr.S_addr:=inet_addr(pchar(IP));
Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
ErrorCode:=connect(Sock,Server,sizeof(Server)); //这个地方
if ErrorCode<>invalid_socket then begin
// Send(Sock,Buffer,6,0);
Result := True;
end;
CloseSocket(Sock);
end;
我的问题就是:
ErrorCode:=connect(Sock,Server,sizeof(Server)); //程序到这里之后,如果连接成功就会很快,但是如果连接不成功,这个地方就要等一些时候,在这个地方该怎么设置TimeOut?
谢谢。
var
Sock : TSocket;
ErrorCode : integer;
Server : TSockaddr;
begin
Result := False;
Server.sin_family:=AF_INET;
Server.sin_port:=htons(Port);
Server.sin_addr.S_addr:=inet_addr(pchar(IP));
Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
ErrorCode:=connect(Sock,Server,sizeof(Server)); //这个地方
if ErrorCode<>invalid_socket then begin
// Send(Sock,Buffer,6,0);
Result := True;
end;
CloseSocket(Sock);
end;
我的问题就是:
ErrorCode:=connect(Sock,Server,sizeof(Server)); //程序到这里之后,如果连接成功就会很快,但是如果连接不成功,这个地方就要等一些时候,在这个地方该怎么设置TimeOut?
谢谢。
解决方案 »
- 120分 求禁止DBLookupComboboxEh1的自动填充功能的方法
- 祝大家新年快乐,顺便争做2005D区第一贴
- Delphi编译提示[fatal error]file not found:'ExceptionLog.dcu'
- dbgrid或dbgrideh中只有oncellclick和ondblclick事件,希望在单击indicator(指示器)时也能实现oncellclick的功能;在使用ondblclick事件时
- 如何调用GotoKey .Findkey函数?
- 编写web浏览器,如何让网页在同一窗口打开?
- 如何编写自己的wizard?
- 如何查询前一个combobox 的内容后的结果复值给第二个combobox中,且反过来也行?急
- 请问怎样用IF 判断Button1.Enabled 是TURE还是FALSE ???
- 自卖自夸,IT技术网站 - http://www.tech521.com
- 还是关于word的小问题,在线等待,上一贴已结
- vb delphi vc++ java mysql sql server oracle
//判断超时的函数,此函数加在客户端程序中,注意要引用WinSock单元
function RecvTimeOut(fd: Cardinal; sec: Word):Integer;
var
fs: TFDSet;
timeout: TTimeVal;
n: Integer;
begin
FD_ZERO(fs);
FD_SET(fd, fs);
timeout.tv_sec := sec;
timeout.tv_usec := 0;
n := Select(fd+1, @fs, nil, nil, @timeout);
Result := n;
end; //客户端发送代码
procedure TForm1.Button2Click(Sender: TObject);
var
Buf: array [0..255] of Char;
begin
Buf := 'shutdown';
ClientSocket1.Socket.SendBuf(Buf, SizeOf(Buf));
if (RecvTimeOut(ClientSocket1.Socket.SocketHandle, 5)=0) then
begin
ShowMessage('发送超时!');
ClientSocket1.Close;
end;
end; //服务器端接收代码
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buf: array [0..255] of Char;
begin
//延迟一定时间
Sleep(StrToInt(Edit1.Text));
if (Socket.ReceiveBuf(Buf, SizeOf(Buf))>=SizeOf(Buf)) then
Memo1.Lines.Add(Buf);
Buf := '执行成功';
Socket.SendBuf(Buf, SizeOf(Buf));
end;
我用的是TSocket不是TCustomWinSocket。
以前做过,现在忘了,去google搜索下吧!!!一般能找到