#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <process.h>
#include "malloc.h"
#include "winsock2.h"
#include <stdlib.h>
#include <conio.h>
int open_clientfd(const char* hostname, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("Error: %d\n", WSAGetLastError());
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup( );
return -1;
}
int ClientSock;
struct hostent* hp;
struct sockaddr_in serveraddr;
if ((ClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
return -1; /* check errno for cause of error */
/* Fill in the server's IP address and port */
if ((hp = gethostbyname(hostname)) == NULL)
return -2; /* check h_errno for cause of error */
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
// serveraddr.sin_addr.S_un.S_addr=inet_addr(((const char*)hp->h_addr[0]));
//serveraddr.sin_addr.S_un.S_addr =((LPIN_ADDR)hp->h_addr)->S_un.S_addr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port); //感觉这几句有问题。。。
int result;
result = connect(ClientSock, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
if (0 != result)
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup();
}
return ClientSock;
}
int main()
{
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
char recvBuf [6000];
int ClientSock = open_clientfd("www.baidu.com", 65000);
int result = send (ClientSock , sendbuf , strlen(sendbuf) , 0);
memset(recvBuf,0x00,sizeof(recvBuf));
int recvresult = recv(ClientSock, recvBuf, 6000, 0);
printf("%s",recvBuf);
closesocket(ClientSock);
WSACleanup();
return 0;
}
我想通过sent 然后得到 一个网页的信息,可是我怎么也连接不上这个网页,
我只能通过 域名来访问网页,请高手上述程序为什么connect不上。。。
16 个解决方案
#1
connect 错误码 10060
#2
顶顶 别人来解决
#3
看到这个问题很感兴趣,所以研究了一会儿,首先说下我觉得出现的问题:
1 gethostbyname返回来的是不是正确的信息,lz怀疑这点应该是正确的,我觉得都没有连上百度怎么获取他的IP等信息?
2 端口号不对,根据我的经验,C端和S端port必须相同,才能连接的上,百度的端口号是65000吗?
基于以上考虑,修改
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
把这行替换成:
serveraddr.sin_addr.S_un.S_addr = inet_addr("220.181.6.18"); //百度的ip,ping后知道的
然后再运行了下,还是10060错误
接下来改端口,但是在网上没有查到百度的端口号,就随便猜了一个80
结果就没有出现错误了,这么说是不是就练到百度上去了?
最后recvresult值为1238960
1 gethostbyname返回来的是不是正确的信息,lz怀疑这点应该是正确的,我觉得都没有连上百度怎么获取他的IP等信息?
2 端口号不对,根据我的经验,C端和S端port必须相同,才能连接的上,百度的端口号是65000吗?
基于以上考虑,修改
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
把这行替换成:
serveraddr.sin_addr.S_un.S_addr = inet_addr("220.181.6.18"); //百度的ip,ping后知道的
然后再运行了下,还是10060错误
接下来改端口,但是在网上没有查到百度的端口号,就随便猜了一个80
结果就没有出现错误了,这么说是不是就练到百度上去了?
最后recvresult值为1238960
#4
刚才和我的同事讨论了下,分享一下获取网站IP和port的方法
1 打开cmd
2 ping www.baidu.com //就是你想访问的网页,百度的为220.181.6.18
3 然后打开一个百度网页
4 在cmd里面输入natstat -an,就可以所有ip对应的端口号了,你找到220.181.6.18,发现后面跟的是80
所以事实上百度的端口就是80
1 打开cmd
2 ping www.baidu.com //就是你想访问的网页,百度的为220.181.6.18
3 然后打开一个百度网页
4 在cmd里面输入natstat -an,就可以所有ip对应的端口号了,你找到220.181.6.18,发现后面跟的是80
所以事实上百度的端口就是80
#5
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <process.h>
#include "malloc.h"
#include "winsock2.h"
#include <stdlib.h>
#include <conio.h>
#pragma comment(lib,"Ws2_32.lib")
int open_clientfd(const char* hostname, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("Error: %d\n", WSAGetLastError());
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup( );
return -1;
}
int ClientSock;
struct hostent* hp;
struct sockaddr_in serveraddr;
if ((ClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
return -1; /* check errno for cause of error */
/* Fill in the server's IP address and port */
if ((hp = gethostbyname(hostname)) == NULL)
return -2; /* check h_errno for cause of error */
//// 这里转换的ip地址是错误的
////memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
////
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port); //感觉这几句有问题。。。
//// 设置ip地址
serveraddr.sin_addr.S_un.S_addr=inet_addr((char*)inet_ntoa(*(struct in_addr*)(hp->h_addr)));
int result;
result = connect(ClientSock, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
if (0 != result)
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup();
}
return ClientSock;
}
int main()
{
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
char recvBuf [6000];
//// 端口应该是80 ps:www.baidu.com 没有返回信息,用了baidu.com
int ClientSock = open_clientfd("baidu.com", 80);
int result = send (ClientSock , sendbuf , strlen(sendbuf) , 0);
memset(recvBuf,0x00,sizeof(recvBuf));
int recvresult = recv(ClientSock, recvBuf, 6000, 0);
printf("%s",recvBuf);
closesocket(ClientSock);
WSACleanup();
return 0;
}
上面的代码是在lz的代码基础上做了修改,修改的地方用了(////)注释方式,做了说明
http的默认端口是80,而百度的65000端口没有开放,lz可以使用浏览器连接www.baidu.com:65000尝试,看看结果
#6
#7
改下端口跟ip地址拷贝方式.
#8
端口没对上...
#9
netstat 查看端口状态
tcpdump抓包分析
tcpdump抓包分析
#10
很强悍啊顶起
#11
楼上说的果然有道理,ping www.baidu.com 10065不通啊,不过也有可能是楼主一定要这么干,我很好奇楼主想通过这个代码干嘛?
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <process.h>
#include "malloc.h"
#include "winsock2.h"
#include <stdlib.h>
#include <conio.h>
int open_clientfd(const char* hostname, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("Error: %d\n", WSAGetLastError());
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup( );
return -1;
}
int ClientSock;
struct hostent* hp;
struct sockaddr_in serveraddr;
if ((ClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
return -1; /* check errno for cause of error */
}
/* Fill in the server's IP address and port */
if ((hp = gethostbyname(hostname)) == NULL)
{
return -2; /* check h_errno for cause of error */
}
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
// serveraddr.sin_addr.S_un.S_addr=inet_addr(((const char*)hp->h_addr[0]));
//serveraddr.sin_addr.S_un.S_addr =((LPIN_ADDR)hp->h_addr)->S_un.S_addr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port); //感觉这几句有问题。。。
int result;
result = connect(ClientSock, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
if (0 != result)
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup();
}
return ClientSock;
}
int main()
{
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
char recvBuf [6000];
int ClientSock = open_clientfd("www.baidu.com", 65000);
int result = send (ClientSock , sendbuf , strlen(sendbuf) , 0);
memset(recvBuf,0x00,sizeof(recvBuf));
int recvresult = recv(ClientSock, recvBuf, 6000, 0);
printf("%s",recvBuf);
closesocket(ClientSock);
WSACleanup();
return 0;
}
#12
说错了,是65000
#13
这只是个测试,我想写一个爬虫的程序,可是之前就一直connect不上,所以就写一个小程序 test一下了。。
#14
想问一下,爬虫程序的 发送的内容是
是这个字符串吗?
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
是这个字符串吗?
#15
解析得到ip地址的时候出错了,得到的IP地址不正确,5楼的代码可以连上,其中有修改说明
#16
tiao618说得对
服务器地址赋值改为
memcpy(&serveraddr.sin_addr,hp->h_addr,sizeof(in_addr));
端口改为80
服务器地址赋值改为
memcpy(&serveraddr.sin_addr,hp->h_addr,sizeof(in_addr));
端口改为80
#1
connect 错误码 10060
#2
顶顶 别人来解决
#3
看到这个问题很感兴趣,所以研究了一会儿,首先说下我觉得出现的问题:
1 gethostbyname返回来的是不是正确的信息,lz怀疑这点应该是正确的,我觉得都没有连上百度怎么获取他的IP等信息?
2 端口号不对,根据我的经验,C端和S端port必须相同,才能连接的上,百度的端口号是65000吗?
基于以上考虑,修改
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
把这行替换成:
serveraddr.sin_addr.S_un.S_addr = inet_addr("220.181.6.18"); //百度的ip,ping后知道的
然后再运行了下,还是10060错误
接下来改端口,但是在网上没有查到百度的端口号,就随便猜了一个80
结果就没有出现错误了,这么说是不是就练到百度上去了?
最后recvresult值为1238960
1 gethostbyname返回来的是不是正确的信息,lz怀疑这点应该是正确的,我觉得都没有连上百度怎么获取他的IP等信息?
2 端口号不对,根据我的经验,C端和S端port必须相同,才能连接的上,百度的端口号是65000吗?
基于以上考虑,修改
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
把这行替换成:
serveraddr.sin_addr.S_un.S_addr = inet_addr("220.181.6.18"); //百度的ip,ping后知道的
然后再运行了下,还是10060错误
接下来改端口,但是在网上没有查到百度的端口号,就随便猜了一个80
结果就没有出现错误了,这么说是不是就练到百度上去了?
最后recvresult值为1238960
#4
刚才和我的同事讨论了下,分享一下获取网站IP和port的方法
1 打开cmd
2 ping www.baidu.com //就是你想访问的网页,百度的为220.181.6.18
3 然后打开一个百度网页
4 在cmd里面输入natstat -an,就可以所有ip对应的端口号了,你找到220.181.6.18,发现后面跟的是80
所以事实上百度的端口就是80
1 打开cmd
2 ping www.baidu.com //就是你想访问的网页,百度的为220.181.6.18
3 然后打开一个百度网页
4 在cmd里面输入natstat -an,就可以所有ip对应的端口号了,你找到220.181.6.18,发现后面跟的是80
所以事实上百度的端口就是80
#5
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <process.h>
#include "malloc.h"
#include "winsock2.h"
#include <stdlib.h>
#include <conio.h>
#pragma comment(lib,"Ws2_32.lib")
int open_clientfd(const char* hostname, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("Error: %d\n", WSAGetLastError());
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup( );
return -1;
}
int ClientSock;
struct hostent* hp;
struct sockaddr_in serveraddr;
if ((ClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
return -1; /* check errno for cause of error */
/* Fill in the server's IP address and port */
if ((hp = gethostbyname(hostname)) == NULL)
return -2; /* check h_errno for cause of error */
//// 这里转换的ip地址是错误的
////memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
////
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port); //感觉这几句有问题。。。
//// 设置ip地址
serveraddr.sin_addr.S_un.S_addr=inet_addr((char*)inet_ntoa(*(struct in_addr*)(hp->h_addr)));
int result;
result = connect(ClientSock, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
if (0 != result)
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup();
}
return ClientSock;
}
int main()
{
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
char recvBuf [6000];
//// 端口应该是80 ps:www.baidu.com 没有返回信息,用了baidu.com
int ClientSock = open_clientfd("baidu.com", 80);
int result = send (ClientSock , sendbuf , strlen(sendbuf) , 0);
memset(recvBuf,0x00,sizeof(recvBuf));
int recvresult = recv(ClientSock, recvBuf, 6000, 0);
printf("%s",recvBuf);
closesocket(ClientSock);
WSACleanup();
return 0;
}
上面的代码是在lz的代码基础上做了修改,修改的地方用了(////)注释方式,做了说明
http的默认端口是80,而百度的65000端口没有开放,lz可以使用浏览器连接www.baidu.com:65000尝试,看看结果
#6
#7
改下端口跟ip地址拷贝方式.
#8
端口没对上...
#9
netstat 查看端口状态
tcpdump抓包分析
tcpdump抓包分析
#10
很强悍啊顶起
#11
楼上说的果然有道理,ping www.baidu.com 10065不通啊,不过也有可能是楼主一定要这么干,我很好奇楼主想通过这个代码干嘛?
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <process.h>
#include "malloc.h"
#include "winsock2.h"
#include <stdlib.h>
#include <conio.h>
int open_clientfd(const char* hostname, int port)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
printf("Error: %d\n", WSAGetLastError());
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup( );
return -1;
}
int ClientSock;
struct hostent* hp;
struct sockaddr_in serveraddr;
if ((ClientSock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
return -1; /* check errno for cause of error */
}
/* Fill in the server's IP address and port */
if ((hp = gethostbyname(hostname)) == NULL)
{
return -2; /* check h_errno for cause of error */
}
memcpy(&serveraddr.sin_addr,hp->h_addr_list,hp->h_length);
// serveraddr.sin_addr.S_un.S_addr=inet_addr(((const char*)hp->h_addr[0]));
//serveraddr.sin_addr.S_un.S_addr =((LPIN_ADDR)hp->h_addr)->S_un.S_addr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(port); //感觉这几句有问题。。。
int result;
result = connect(ClientSock, (SOCKADDR*)&serveraddr, sizeof(SOCKADDR));
if (0 != result)
{
printf("Error: %d\n", WSAGetLastError());
WSACleanup();
}
return ClientSock;
}
int main()
{
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
char recvBuf [6000];
int ClientSock = open_clientfd("www.baidu.com", 65000);
int result = send (ClientSock , sendbuf , strlen(sendbuf) , 0);
memset(recvBuf,0x00,sizeof(recvBuf));
int recvresult = recv(ClientSock, recvBuf, 6000, 0);
printf("%s",recvBuf);
closesocket(ClientSock);
WSACleanup();
return 0;
}
#12
说错了,是65000
#13
这只是个测试,我想写一个爬虫的程序,可是之前就一直connect不上,所以就写一个小程序 test一下了。。
#14
想问一下,爬虫程序的 发送的内容是
是这个字符串吗?
char sendbuf[]="GET / HTTP/1.1\r\nHost:localhost\r\nConnection:closeUser-agent:MyApp/0.1Accept-language:zh-cn\r\n\r\n";
是这个字符串吗?
#15
解析得到ip地址的时候出错了,得到的IP地址不正确,5楼的代码可以连上,其中有修改说明
#16
tiao618说得对
服务器地址赋值改为
memcpy(&serveraddr.sin_addr,hp->h_addr,sizeof(in_addr));
端口改为80
服务器地址赋值改为
memcpy(&serveraddr.sin_addr,hp->h_addr,sizeof(in_addr));
端口改为80