weixin_43697323 2019-06-22 23:38 采纳率: 0%
浏览 281

C语言通过socket接受一个网页的子页信息啊????求大佬

#include
#include
#pragma comment(lib,"ws2_32.lib")
void main()
{
WSADATA data;
//winsock版本2.2
int err = WSAStartup(MAKEWORD(2, 2), &data);
if (err)
return;

//用域名获取对方主机名
char host[] = "www.dianping.com";
struct hostent* h = gethostbyname(host);
if (h == NULL)
    return;

////IPV4
//if (h->h_addrtype != AF_INET)
//  return;
struct in_addr ina;
//解析IP
memmove(&ina, h->h_addr, 4);
LPSTR ipstr = inet_ntoa(ina);
//Socket封装
struct sockaddr_in si;
si.sin_family = AF_INET;
si.sin_port = htons(80);
//ipstr = (LPSTR)"120.78.150.62:80/wuqi/index.html";
si.sin_addr.S_un.S_addr = inet_addr(ipstr);
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(sock, (SOCKADDR*)& si, sizeof(si));
if (sock == -1 || sock == -2)
    return;

//发送请求
//char host[] = "120.78.150.62:80/wuqi/index.html";
char request[1024] = "GET /?st=1 HTTP/1.1\r\nHost:";
strcat_s(request, host);
strcat_s(request, "\r\nConnection:Close\r\n\r\n");
int ret = send(sock, request, strlen(request), 0);
//printf("%s\n",request);
//获取网页内容
FILE * f = fopen("recieved.txt","w");

int isstart = 0;
while (ret > 0)
{
    const int bufsize = 1024;
    char* buf = (char*)calloc(bufsize, 1);
    ret = recv(sock, buf, bufsize - 1, 0);
    fprintf(f, "%s", buf);
    free(buf);
}
fclose(f);
closesocket(sock);
WSACleanup();
printf("读取网页内容成功,已保存在recieved.txt中");
printf("3秒后自动关闭");
Sleep(3000);
return;

}
就输入子页的域名地址就不知道为什么访问不了了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-23 09:28
    关注

    C语言如果在windows上,读取网页不需要那么复杂,直接用URLDownloadToFile 这个api函数就可以了
    https://baike.baidu.com/item/URLDownloadToFile

    评论

报告相同问题?

悬赏问题

  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。