bool   __fastcall   TForm1::Port(char   *ip,int   port)
{

    WORD   wVersionRequested;
WSADATA   wsaData;
int   err;

wVersionRequested   =   MAKEWORD(   1,   1   );

err   =   WSAStartup(   wVersionRequested,   &wsaData   );
if   (   err   !=   0   )   {

return   false;
}

if   (   LOBYTE(   wsaData.wVersion   )   !=   1   ||
                HIBYTE(   wsaData.wVersion   )   !=   1   )   {
WSACleanup(   );
return   false;
}
SOCKET   sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN   addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(ip);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(port);
int   nret=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
                 
if(nret==0)
{
                      closesocket(sockClient);
                      WSACleanup();
                      return   true;
}
                else
                {
                      closesocket(sockClient);
                      WSACleanup();
                      return   false;
                }

}

可以先检查一下IP是不是可用的,然后再扫描端口就OK了

这段代码有问题吧?

if(nret==0)
{
                      closesocket(sockClient);
                      WSACleanup();
                      return   true;
}
else
{
        closesocket(sockClient);
        WSACleanup();
        return   false;
}

用异步的方式,自己控制超时(0-1000000…ms)!

connect后用select来检测结果

具体怎么避免ip不存在,或者端口没开的问题呢?

该回复于2008-07-19 16:13:33被版主删除