本人以前从事数据库开发,最近才研究winsock所以很多地方不是很明白啊,我按照书上的说法,用delphi写了一个调用getsockopt的例子,代码如下
procedure TForm1.Button1Click(Sender: TObject);
var
Bool : Boolean;
Sock1 : TSocket;
Addr,Addr1 : SOCKADDR_IN;
WSAData1 : WSAData;
BoolLen : Integer;
AddrLen : integer;
begin
Bool := False;
BoolLen := sizeof(Bool);
AddrLen := Sizeof(Addr1);
WSAStartUp(makeword(2,2),WSAData1);
Sock1 := Socket(AF_INET,Sock_Stream,IPPROTO_TCP);
Addr.sin_family := AF_INET;
Addr.sin_port := htons(5150);
Addr.sin_addr.S_addr := INET_Addr('servername');
bind(Sock1,Addr,sizeof(Addr));
Listen(Sock1,8);
Accept(Sock1,@Addr1,@AddrLen);
if GetSockopt(Sock1,SOL_SOCKET,SO_ACCEPTCONN ,pchar(Bool),BoolLen) = SOCKET_ERROR then if Bool then
showmessage('调用成功');
CloseSocket(Sock1);
WSACleanup();end;
但不知道为什么总是返回false啊,请各位高手指点一下
procedure TForm1.Button1Click(Sender: TObject);
var
Bool : Boolean;
Sock1 : TSocket;
Addr,Addr1 : SOCKADDR_IN;
WSAData1 : WSAData;
BoolLen : Integer;
AddrLen : integer;
begin
Bool := False;
BoolLen := sizeof(Bool);
AddrLen := Sizeof(Addr1);
WSAStartUp(makeword(2,2),WSAData1);
Sock1 := Socket(AF_INET,Sock_Stream,IPPROTO_TCP);
Addr.sin_family := AF_INET;
Addr.sin_port := htons(5150);
Addr.sin_addr.S_addr := INET_Addr('servername');
bind(Sock1,Addr,sizeof(Addr));
Listen(Sock1,8);
Accept(Sock1,@Addr1,@AddrLen);
if GetSockopt(Sock1,SOL_SOCKET,SO_ACCEPTCONN ,pchar(Bool),BoolLen) = SOCKET_ERROR then if Bool then
showmessage('调用成功');
CloseSocket(Sock1);
WSACleanup();end;
但不知道为什么总是返回false啊,请各位高手指点一下
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货