一段用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?
谢谢。
解决方案 »
- 关于nextdbgrid 导入数据过大如何限制的问题.
- 如果有一天cc跑死了.大富翁与盒子的站长也死了.delphi系在中国就完了.
- 求《Windows 95 程式设计指南》附书光盘
- 怎么释放windows对某个文件的占用,有时候并没有使用该文件的程序,但系统仍不让删该文件,真郁闷了!
- 辛苦的劳动后,你会享受吗?——九品御厨,教你怎么吃!
- 用winexec()为何不成功
- 祝所有看到的---节日快乐!!顺便问个问题,希望给予帮助!!
- 如何让操作系统正确显示繁体字?
- 救急啊,谢谢
- 如何判断一个窗体是否已经创建(存在)?急急!
- 还是关于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搜索下吧!!!一般能找到