不知道什么昵称 2015-04-30 14:19 采纳率: 66.7%
浏览 3002
已采纳

linux c socket编程 1、recv接收不完整 2、有些网站不能打开

小白刚接触socket编程,很多没搞清的地方。
我用如下代码

 #include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h>
#include <netdb.h>

int main() {
    int  so=socket(AF_INET,SOCK_STREAM,0),r;
    sockaddr_in addr;
    hostent *hp;
    hp=gethostbyname("www.csdn.net");
    addr.sin_addr.s_addr=*((unsigned long*)hp->h_addr);
    addr.sin_family=AF_INET;
    addr.sin_port=htons(80);
    connect(so,(sockaddr*)&addr,sizeof(sockaddr));
    char message[200]="GET / HTTP/1.0\r\nHost:www.csdn.net\r\n\r\n";
    send(so,message,strlen(message)+1,0);
    char buf[20000]={0};
    r=recv(so,buf,20000,MSG_PEEK);
    printf("r %d\n%s",r,buf);
}

1、看见recv返回的只有1400,所以buf没有把完整的网页源代码记录下来,只有一部分,请问为什么
2、如果换一个网站,比如www.stateair.net,会出现404错误,但浏览器就可以打开,请问为什么

谢谢

  • 写回答

4条回答 默认 最新

  • zzkjliu 2015-04-30 21:05
    关注

    1、有时一次接收只有部分数据,你多接收几次,会接受全的。
    2、网站和浏览器之间的通讯协议要搞清楚。可以用一个网路监控工具进行监控和分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮