linux 下 用 socket下载网页

霜夜丶 2014-03-18 12:20:32
之前在vs2010上实现了 结果老大让我弄到linux上 结果同样的代码不知到为啥用不了

这是我写的 球大婶帮忙看看为啥
void GetUrl(char* url){
char cSrvName[256] = "www.baidu.com";
// strcpy(cSrvName, url);
char* pHost = strstr(cSrvName, "/");
char dizhi[256];
memset(dizhi, 0, 256);
strcpy(dizhi, "/");
if(NULL != pHost){
strcpy(dizhi, pHost);
*pHost = '\0';
}
char host[256];
memset(dizhi, 0, 256);
strcpy(host, cSrvName);
int cfd = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == cfd){
printf("socket fail! \r\n");
return;
}
struct sockaddr_in s_add;
bzero(&s_add, sizeof(struct sockaddr_in));
s_add.sin_family = AF_INET;
hostent* lphost = gethostbyname(host);
if(NULL == lphost){
return;
}
s_add.sin_addr.s_addr = *((in_addr_t*)lphost->h_addr);
s_add.sin_port = htons(80);
int con = connect(cfd, (struct sockaddr*)&s_add, sizeof(s_add));
if(-1 == con){
return;
}
char header[256];
memset(header, 0, 256);
strcat(header, "GET ");
strcat(header, dizhi);
strcat(header, " HTTP/1.1\r\n");
strcat(header, "HOST: ");
strcat(header, host);
strcat(header, "\r\nConnection: Close\r\n\r\n");
int sen = write(cfd, header, strlen(header));
if(sen < 0){
return;
}
ofstream fout;
fout.open("/root/文档/a.txt");
static char text[256];
bool isFind = false;
char* pA = "\r\n\r\n";
while(read(cfd, text, 256) > 0){
char* pB = strstr(text, pA);
if((NULL != pB) && (false == isFind)){
isFind = true;
fout<<pB;
}
if(isFind){
fout<<text;
memset(text, 0, 256);
}
}
close(cfd);
}
...全文
89 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
titer1 2014-03-18
  • 打赏
  • 举报
回复
没有问题症状? 比如说你没有debug 单步跟踪下?
霜夜丶 2014-03-18
  • 打赏
  • 举报
回复
求解啊 为什么啊

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧