recv()问题! 我用socket实现http的GET命令,在发送Get命令后,接收服务器传回的信息其中包含了协议头,和实体。但我发现我接收的实体的内容即请求的网页的源文件并不完整,缺少一部分。无论我把接收缓冲区社为多大,都解决不了问题,请问这是怎么回事啊谢谢先 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你用我贴的这个类来接收或者直接用wininet方法http://community.csdn.net/Expert/topic/3532/3532744.xml?temp=.8361933 可以接收到但就是不完整! IN_ADDR iaHost; LPHOSTENT lpHostEntry; iaHost.s_addr = inet_addr(strServer); lpHostEntry = gethostbyname(strServer); char szBuffer[1024*20]={'\0'}; SOCKET Socket; Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (Socket == INVALID_SOCKET) { AfxMessageBox("socket error!"); return -1; } char * SerIP; SerIP=inet_ntoa(*(struct in_addr *)*lpHostEntry->h_addr_list); SOCKADDR_IN saServer; saServer.sin_port = htons(80); saServer.sin_family = AF_INET; saServer.sin_addr.s_addr = inet_addr(SerIP); int nRet; nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN)); if (nRet == SOCKET_ERROR) { AfxMessageBox("connect error!") ; closesocket(Socket); return -1; } sprintf(szBuffer,"GET %s",strFile); strcat(szBuffer," HTTP/1.1 \r\n"); strcat(szBuffer,"Accept: */* \r\n"); strcat(szBuffer,"Accept-Language: zh-cn\r\n"); strcat(szBuffer,"Accept-Encoding: gzip, deflater\r\n"); strcat(szBuffer,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; MyIE 2.4; Smart Explorer v4.9 ( 未注册 ))\r\n"); char strTemp[25]; sprintf(strTemp,"Host:%s:80\r\n",SerIP); strcat(szBuffer,strTemp); strcat(szBuffer,"Connection: Keep-Alive\r\n"); strcat(szBuffer,"\r\n"); nRet = send(Socket, szBuffer, strlen(szBuffer), 0); if (nRet == SOCKET_ERROR) { AfxMessageBox("send error!"); closesocket(Socket); return -1; } nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0); if (nRet == SOCKET_ERROR) { AfxMessageBox("recv error"); return -1; } CFile cf; //写入文件 cf.Open("E:\\test.txt",CFile::modeCreate|CFile::modeWrite); cf.Write(szBuffer,sizeof(szBuffer)); AfxMessageBox("ok!"); closesocket(Socket); 这样写,怎么修改? 用wininet比较方便。帮你封装了http协议。而socket只能作封装了ip协议 我们的作业要求用socket实现,呵呵郁闷啊 http://community.csdn.net/Expert/topic/3532/3532744.xml?temp=.8361933我帖的这个类就是用socket实现的http GET方法 CEdit控件如何设置每行文字有不同的颜色?或者介绍一个可以实现该功能的代码. 上下文菜单的形状有没有办法控制 菜鸟的问题:如何将一段十六进制数据直接读入内存呢?详情如下: opengl中曲面的绘制 有用过Month Calender Control的吗?100分求救 关于界面线程的问题,希望大家能解决 找一个(包括上一个、下一个、第一个、最后一个)的控件 函数、变量的调用问题? 这个dll文件应该怎样编写,高分送上 小问题:忘记了,如何收自己发消息。。。。 急需解决的问题!!!! 有关预编译指令#import的问题?
http://community.csdn.net/Expert/topic/3532/3532744.xml?temp=.8361933
但就是不完整! IN_ADDR iaHost;
LPHOSTENT lpHostEntry;
iaHost.s_addr = inet_addr(strServer);
lpHostEntry = gethostbyname(strServer); char szBuffer[1024*20]={'\0'}; SOCKET Socket;
Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Socket == INVALID_SOCKET)
{
AfxMessageBox("socket error!");
return -1;
}
char * SerIP;
SerIP=inet_ntoa(*(struct in_addr *)*lpHostEntry->h_addr_list);
SOCKADDR_IN saServer;
saServer.sin_port = htons(80);
saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = inet_addr(SerIP);
int nRet;
nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
AfxMessageBox("connect error!") ;
closesocket(Socket);
return -1;
}
sprintf(szBuffer,"GET %s",strFile);
strcat(szBuffer," HTTP/1.1 \r\n");
strcat(szBuffer,"Accept: */* \r\n");
strcat(szBuffer,"Accept-Language: zh-cn\r\n");
strcat(szBuffer,"Accept-Encoding: gzip, deflater\r\n");
strcat(szBuffer,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; MyIE 2.4; Smart Explorer v4.9 ( 未注册 ))\r\n");
char strTemp[25];
sprintf(strTemp,"Host:%s:80\r\n",SerIP);
strcat(szBuffer,strTemp);
strcat(szBuffer,"Connection: Keep-Alive\r\n");
strcat(szBuffer,"\r\n");
nRet = send(Socket, szBuffer, strlen(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
AfxMessageBox("send error!");
closesocket(Socket);
return -1;
}
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
AfxMessageBox("recv error");
return -1;
} CFile cf; //写入文件
cf.Open("E:\\test.txt",CFile::modeCreate|CFile::modeWrite);
cf.Write(szBuffer,sizeof(szBuffer));
AfxMessageBox("ok!");
closesocket(Socket);
这样写,怎么修改?
郁闷啊
我帖的这个类就是用socket实现的http GET方法