#include <stdio.h>
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name = "www.baidu.com";
char* req = "GET / HTTP/1.1\r\n"
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight, application/vnd.ms-excel\r\n"
"Accept-Language: zh-cn\r\n"
"UA-CPU: x86\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\r\n"
"Host: www.baidu.com\r\n"
"Connection: Keep-Alive";
if (WSAStartup(winsock_version, &wsadata))
printf("can't initial socket");
lphostent = gethostbyname(host_name);
if (lphostent == NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR) * lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR) & saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return ;
}
else
printf("connected with %s\n", host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket); }
else
printf("send() OK\n");
char dest[10000];
nRet = 1;
while (nRet > 0)
{
nRet = recv(hsocket, (LPSTR)dest, sizeof(dest), 0);
if (nRet > 0)
dest[nRet] = 0;
else
dest[0] = 0;
printf("\nReceived bytes:%d\n", nRet);
printf("Result:\n%s", dest);
}
}
如题,我用网络嗅探器也探测到成功发送了GET请求数据,但是recv()的字节是0,琢磨了很久还是搞不明白,谢谢大家帮我看看。
#include "winsock.h"
#pragma comment(lib,"ws2_32.lib")
#define winsock_version 0x0101
void main()
{
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
const char* host_name = "www.baidu.com";
char* req = "GET / HTTP/1.1\r\n"
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight, application/vnd.ms-excel\r\n"
"Accept-Language: zh-cn\r\n"
"UA-CPU: x86\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\r\n"
"Host: www.baidu.com\r\n"
"Connection: Keep-Alive";
if (WSAStartup(winsock_version, &wsadata))
printf("can't initial socket");
lphostent = gethostbyname(host_name);
if (lphostent == NULL)
printf("lphostent is null");
hsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR) * lphostent->h_addr_list);
nRet = connect(hsocket, (LPSOCKADDR) & saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf("can't connect");
closesocket(hsocket);
return ;
}
else
printf("connected with %s\n", host_name);
nRet = send(hsocket, req, strlen(req), 0);
if (nRet == SOCKET_ERROR)
{
printf("send() failed");
closesocket(hsocket); }
else
printf("send() OK\n");
char dest[10000];
nRet = 1;
while (nRet > 0)
{
nRet = recv(hsocket, (LPSTR)dest, sizeof(dest), 0);
if (nRet > 0)
dest[nRet] = 0;
else
dest[0] = 0;
printf("\nReceived bytes:%d\n", nRet);
printf("Result:\n%s", dest);
}
}
如题,我用网络嗅探器也探测到成功发送了GET请求数据,但是recv()的字节是0,琢磨了很久还是搞不明白,谢谢大家帮我看看。
解决方案 »
- 如何在VC++下用API讀LCD的EDID信息?
- 一个基本的网络通信问题,请大家帮忙看下啊~
- 30分+10元现金请会VC++又会VB的朋友帮个忙,转个码,编个程。
- 编译不过,为什么????
- 如何在由CDialog类派生的子类中使用CDocument子类的成员
- 一个非常棘手的问题???????????????(Up者有分,解决者重分)
- 一段别人发出来的东西 求解释 看不懂
- vs2010 莫名其妙的出错 所有工程都生成失败
- 100分求助,请问如何实现程序运行过程中,CDialogbar中的按钮灰化?
- 对象的this作线程参数,调用成员函数的问题
- 如何动态改变ListCtrl控件的列数?
- IActiveDesktop的 未定义的标志符
2,把while循环改为while(1),多收几次看看。
按照您说的改为while(1)之后,则是反复地recieve 0byte,麻烦您再帮我看看。
以下是运行的结果,帮忙看看!connected with www.baidu.com
send() OKReceived bytes:372
Result:
HTTP/1.1 200 OK
Date: Wed, 16 Jan 2008 02:37:52 GMT
Server: BWS/1.0
Content-Length: 1559
Content-Type: text/html
Cache-Control: private
Expires: Wed, 16 Jan 2008 02:37:52 GMT
Content-Encoding: gzip
Set-Cookie: BAIDUID=0373638A8AC028C7AF0DB06651D1C5CC:FG=1; expires=Wed, 16-Jan-3
8 02:37:52 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Received bytes:1559
Result:
?
Received bytes:0
Result:
请按任意键继续. . .
然后输入
GET / HTTP/1.1
Host:www.baidu.com结束的两个回车是必须的
之后就能看到结果了
你的程序也发这样的字符串就行.
再 去看你的get 语句是否有错。
----------------------
你的网页带有图片之类的吧,那些图片你得到没?