为什么connect会得到不同的结果 帮忙看看吧!该怎么处理
为什么connect会得到不同的结果 帮忙看看吧!
// Initialize Winsock
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
WSACleanup();
return;
}
char address[]= "www.5166.info ";
hostent* remoteHost=NULL;
remoteHost = gethostbyname(address);
if (WSAGetLastError() != 0) {
WSACleanup();
return;
}
if (remoteHost==NULL)
{
WSACleanup();
return;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr=*(struct in_addr *)*remoteHost-> h_addr_list;
clientService.sin_port = htons( 220 );
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n " );
WSACleanup();
return;
}
printf( "Connected to server.\n ");
WSACleanup();
return;
问题1:我输入的是一个不存在的url,但是gethostbyname还是返回正常,也取不到错误!
问题2:当port=1223时,connect报告失败,而port=80时,却说连接成功。
一个上午都花费在这几段程序上了,帮忙看看吧!
------解决方案--------------------
问题1:你先判断remoteHost 是否为NULL
问题2:连接网站当然要使用80端口,这是最基本的常识了
------解决方案--------------------
参考
char servAddr[30] = "www.sohu.com ";
hostent* pHostent = gethostbyname( servAddr );
if(pHostent == NULL){
wsprintf( buff, "get host name failed with error: %d\n ", WSAGetLastError() );
mbox( buff );
return false ;
}
hostent& he = *pHostent;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons( 80 );
memcpy( &serverAddr.sin_addr.s_addr, he.h_addr_list[0], he.h_length );
if(connect( m_socket, ( SOCKADDR * ) &serverAddr, sizeof( serverAddr ) ) == 0){
//success
mout( "connect to server success.\n " );
}else{
wsprintf( buff, "connect to server fail. errcode: %d\n ", WSAGetLastError() );
mout( buff );
return false;
}
// Initialize Winsock
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
WSACleanup();
return;
}
char address[]= "www.5166.info ";
hostent* remoteHost=NULL;
remoteHost = gethostbyname(address);
if (WSAGetLastError() != 0) {
WSACleanup();
return;
}
if (remoteHost==NULL)
{
WSACleanup();
return;
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr=*(struct in_addr *)*remoteHost-> h_addr_list;
clientService.sin_port = htons( 220 );
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n " );
WSACleanup();
return;
}
printf( "Connected to server.\n ");
WSACleanup();
return;
问题1:我输入的是一个不存在的url,但是gethostbyname还是返回正常,也取不到错误!
问题2:当port=1223时,connect报告失败,而port=80时,却说连接成功。
一个上午都花费在这几段程序上了,帮忙看看吧!
------解决方案--------------------
问题1:你先判断remoteHost 是否为NULL
问题2:连接网站当然要使用80端口,这是最基本的常识了
------解决方案--------------------
参考
char servAddr[30] = "www.sohu.com ";
hostent* pHostent = gethostbyname( servAddr );
if(pHostent == NULL){
wsprintf( buff, "get host name failed with error: %d\n ", WSAGetLastError() );
mbox( buff );
return false ;
}
hostent& he = *pHostent;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons( 80 );
memcpy( &serverAddr.sin_addr.s_addr, he.h_addr_list[0], he.h_length );
if(connect( m_socket, ( SOCKADDR * ) &serverAddr, sizeof( serverAddr ) ) == 0){
//success
mout( "connect to server success.\n " );
}else{
wsprintf( buff, "connect to server fail. errcode: %d\n ", WSAGetLastError() );
mout( buff );
return false;
}