用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息

用C模拟了一个http请求,但是recv函数接收的数据不完整且不安顺序获取信息

我把代码贴上

#include

#include "winsock2.h"

//#pragma comment(lib, "ws2_32.lib") //2.0版本

int main() {

// Initialize Winsock.

WSADATA wsaData;

int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );

if ( iResult != NO_ERROR ){

printf("Error at WSAStartup()\n");

}

// Create a socket.

SOCKET m_socket;

m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket == INVALID_SOCKET ) {

printf( "Error at socket(): %ld\n", WSAGetLastError() );

WSACleanup();

return 1;

}

// Connect to a server.

struct sockaddr_in clientService;

clientService.sin_family = AF_INET;

clientService.sin_addr.s_addr = inet_addr("113.106.90.157");

clientService.sin_port = htons( 80 );

if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(SOCKADDR)) == SOCKET_ERROR){

printf( "Failed to connect.\n" );

WSACleanup();

return;

}

// Send and receive data.

int bytesSent;

char sendbuf[1024];

sprintf(sendbuf,"%s","GET / HTTP/1.1\r\n");

strcat(sendbuf,"Host: www.chachaoo.com\r\n");

strcat(sendbuf,"Content-Encoding: utf-8\r\n");

strcat(sendbuf,"User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0\r\n\r\n");

int bytesRecv = strlen(sendbuf);

char recvbuf[1024];

char *precvbuf = recvbuf;

bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );

printf( "Bytes Sent: %ld\n", bytesSent );

//bytesRecv = recv( m_socket, recvbuf, 2 , 0 );

//printf("\n %d\n",bytesRecv);

while( 1 ) {

bytesRecv = recv(m_socket, recvbuf,1024 , 0);

printf("%s",recvbuf);

// printf("\n%d\n",bytesRecv);

if(bytesRecv<=0){

break;

}

}

close(m_socket);

return 0;

}

winsocket

分享到:

------解决方案--------------------

要让发送完马上断开,要在HTTP头指明:

strcat(sendbuf, "Connection: close\r\n");

另外你接受缓冲print有问题,收到的内容没有\0终止符的,建议改成这样

定义

char recvbuf[1025];

补个终止符

while( 1 ) {

bytesRecv = recv(m_socket, recvbuf,1024 , 0);

if (bytesRecv <= 0) break;

recvbuf[bytesRecv+1] = 0;

printf("%s",recvbuf);

}

------解决方案--------------------

不知道有多少前人掉在TCP Socket

send(人多)send(病少)send(财富)

recv(人多病)recv(少财富)

陷阱里面啊!

http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

------解决方案--------------------

void HexDump(char *buf,int len) {

int i,j,k;

char binstr[80];

for (i=0;i

if (0==(i%16)) {

sprintf(binstr,"%04x -",i);

sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);

} else if (15==(i%16)) {

sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);

sprintf(binstr,"%s  ",binstr);

for (j=i-15;j<=i;j++) {

sprintf(binstr,"%s%c",binstr,('!'

}

printf("%s\n",binstr);

} else {

c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...相关推荐

  1. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战

    R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录

  2. 网络 应用层 | HTTP的认识及实现(模拟实现一个简单的服务器)

    目录 概念 序列化和反序列化 协议 如何制定自定制协议 知名协议----HTTP协议 URL的组成 HTTP协议请求格式 首行 头部 空行 正文 HTTP协议响应格式 首行 头部 空行 正文 HTTP ...

  3. django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库

    一.最近在做接口相关的开发,需求是这样的,通过一个接口所需要传递的参数,调用接口后,处理接口响应的参数,返回多条数据,并动态生成表格,请求表单后将表格的数据入库,下面是我改过的代码,跟实际代码有些出入 ...

  4. idea 拉取gitee代码_手把手撸一个 IDEA 插件

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 作者:乱来梦游神 来源 :https://urlify.cn/Eja6zu 前段时间看到公众号一篇关 ...

  5. extjs 表格数据重新加载_一个简单的更改让PyTorch读取表格数据的速度提高20倍:可大大加快深度学习训练的速度...

    来源:DeepHub IMBA 本文约3000字,建议阅读5分钟我在PyTorch中对表格的数据加载器进行的简单更改如何将训练速度提高了20倍以上,而循环没有任何变化! 深度学习:需要速度 在训练深度 ...

  6. 多重选择函数c语言,大佬在吗,我用C写了一个去多重括号的函数,结果。。。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include "malloc.h" char * changeOrder(char *s); ...

  7. 一键“拉取”链上数据 海淀区应用遍地开花

    近日,北京市首台运用区块链等新技术的政务服务终端亮相海淀区政务服务中心,为办事企业和群众提供自助政务服务.9月1日,<证券日报>记者前往海淀政务服务中心,实地体验了基于区块链等技术的自助便 ...

  8. 北京首台区块链政务终端亮相 一键“拉取”链上数据

    近日,北京市首台运用区块链等新技术的政务服务终端亮相海淀区政务服务中心,为办事企业和群众提供自助政务服务.9月1日,<证券日报>记者前往海淀政务服务中心,实地体验了基于区块链等技术的自助便 ...

  9. k8s拉取镜像规则_k8s

    定向拉取k8s镜像 docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.1 docker pull reg ...

最新文章

  1. FEMS:广东生态所孙蔚旻组利用DNA-SIP宏基因组揭示锑氧化微生物及其代谢途径...
  2. 2021中青杯数学建模A题 汽车组装车间流水线物料配送问题
  3. SDNU 1085.爬楼梯再加强版(矩阵快速幂)
  4. 如何判断一个程序是 32bit 还是 64bit ?
  5. 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制
  6. Postman使用总结(1)——Postman 自动化测试小结
  7. MySQL字符串中数字排序的问题
  8. 重磅!谷歌Fuchsia操作系统将支持运行Linux应用程序
  9. kotlin 泛型约束
  10. 程序执行的过程分析--【sky原创】
  11. 两个队列实现一个栈(C++实现)
  12. PHP 读写 COOKIE
  13. 可变剪接分析流程(rMATS)
  14. css float与学习骑自行车
  15. 祝福大家新年快乐,身体健康,工作顺利,万事如意!
  16. 导出到word时,报错,com组件错时,酱紫弄——————从同事那里抄滴
  17. Python爬虫一般用什么框架比较好?
  18. mysql lucene 结合_Lucene基础(四)-- 结合数据库使用
  19. Python日期抽取——df_dt.dt.weekday与df_dt.weekday()的区别
  20. docker增加目录映射

热门文章

  1. MQTT工作笔记0002---阿里云物联网简介_以及物联网平台下的一些名词
  2. Netty工作笔记0078---Netty其他常用编解码器
  3. C语言小技巧之怎么找到需要的部分
  4. VS2008文档自动生成
  5. sed命令 linux下的超强查找和替换命令
  6. VS2015配置jsoncpp详解
  7. 随想录(项目管理中的感受)
  8. ubuntu修改服务器端,修改ubuntu 服务器配置
  9. 个推mastersecret_推送:个推
  10. linux开机自动联网设置