首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Socket客户端拿不到页面内容,是乱码,该怎么解决

2013-09-13 
Socket客户端拿不到页面内容,是乱码//得到网址的IP并建立与Server的连接char* pAddrwww.baidu.comHOST

Socket客户端拿不到页面内容,是乱码



//得到网址的IP并建立与Server的连接
char* pAddr="www.baidu.com";
HOSTENT* test=gethostbyname(pAddr);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr= *(DWORD*)test->h_addr_list[0];
//printf("%s\n\n",inet_ntoa(addrSrv.sin_addr));
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
connect(socketClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//准备消息头
     //GET / HTTP/1.1
 //Accept: */*
 //Accept-Language: zh-cn 
 //Accept-Encoding: gzip, deflate
 //Connection: Keep-Alive
char* sendBuf="GET / HTTP/1.1\n\
Accept: */*\n\
Accept-Language: zh-cn\n\
Accept-Encoding: gzip, deflate\n\
Connection: Keep-Alive\n\n";
send(socketClient,sendBuf,strlen(sendBuf),0);

const int len=2000;
char recvBuf[len];
recvBuf[len-1]='\0';
recv(socketClient,recvBuf,len-1,0);//暂且接收len-1个字节
printf("%s\n",recvBuf);//打印的是乱码,并非页面内容


[解决办法]
char recvBuf[len] = {};
查看下recv的返回值,这里判断接收了多少数据的
[解决办法]
引用:
Quote: 引用:

char recvBuf[len] = {};
查看下recv的返回值,这里判断接收了多少数据的

send返回值等于strlen(sendBuf),表明确实都发送出去了。乱码也表明未收到任何数据,recv的返回值确实为0,可是这是为什么呢?


摘自msdn:
recv function
...
Return value

If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.

Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.

热点排行