C++Builder 程序员博客
7 Sep
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被版主删除