底层socket接收基于http协议数据处理
来源:互联网 发布:马克斯cms 编辑:程序博客网 时间:2024/05/21 20:44
好久没有写博客了。最近有一些懒散和工作很忙了。
我负责的工作主要是linux后台的服务器应用程序。负责对各个方面的数据进行处理。
我们终端系统,需要从华为的CRM的系统接收报文,此报文就是基于http协议的数据。而我们终端系统是c/c++的程序,需要对报文按字符来处理。因此,需要对http协议进行很详细的了解。
apach等服务器已经封装好了,因此用于java开发的系统就不用理会http协议的格式数据了。
下面我分为发送,接收,处理等方面描述一下http协议。
首先要发送。
发送的数据报文格式,如下
eg:POST /reg.jsp HTTP/ (CRLF)Accept:image/gif,image/x-xbit,... (CRLF)...HOST:www.guet.edu.cn (CRLF)Content-Length:22 (CRLF)Connection:Keep-Alive (CRLF)Cache-Control:no-cache (CRLF)(CRLF) //该CRLF 表示消息报头已经结束,在此之前为消息报头user=jeffrey&pwd=1234 //此行以下为提交的数据
以上是一个http报文的格式,因此我们后台系统如果发送数据,就要将数据格式拼接成这样,对端的web服务器才能认识。
接收报文的格式
HTTP/1.1 200 OKETag: W/"158-1192590101000"Last-Modified: Wed, 17 Oct 2007 03:01:41 GMTContent-Type: text/htmlContent-Length: 158Date: Wed, 17 Oct 2007 03:01:59 GMTServer: Apache-Coyote/1.1
这个格式为正确接收报文的格式。其中
Content-Length: 158 表示正文段的数据长度,因此你接收报文的时候,就要按照这个格式来接受。
还有一种chunked 的形式,表示 数据量过大,对端没flush一次,就发送一次,因此对端就要不停的无限循环的接收数据。每次接收到的数据都是十六制长度+报文
因此接收数据
for (;;) { tmpRespLine = ""; if (recvLine(tmpRespLine, timeOut)) { ACEX_DEBUG(( _ERROR ACE_TEXT( " to recv len failed:[%s]\n"), tmpRespLine.c_str())); return -1; } ACEX_DEBUG(( _INFO ACE_TEXT( " resp len info:[%s]\n"), tmpRespLine.c_str())); if (tmpRespLine.length() == 0) { ACEX_DEBUG(( _ERROR ACE_TEXT( " Msg length body is null\n"))); if (recvLine(tmpRespLine, timeOut)) { ACEX_DEBUG(( _ERROR ACE_TEXT( " to recv len failed:[%s]\n"), tmpRespLine.c_str())); return -1; } ACEX_DEBUG(( _INFO ACE_TEXT( " resp len info:[%s]\n"), tmpRespLine.c_str())); if (tmpRespLine.length() == 0) { break; } }
。。。。。
但是带有长度,就直接根据Content-Length 的长度直接rec就OK
因此底层的数据接收http的数据,一定要注意数据报文协议。很详细很细节的东西,对接收数据编程有极大的帮助。
更多文章,欢迎访问 http://blog.csdn.net/wallwind
- 底层socket接收基于http协议数据处理
- 浏览器多标签,Http协议和底层socket的情况
- http协议的底层实现
- 利用socket自己实现基于HTTP协议的Web服务器
- 利用socket自己实现基于HTTP协议的Web客户端
- SOCKET发送HTTP协议
- Socket模拟Http协议
- socket、http协议
- Socket 和 HTTP 协议
- socket 透析 http协议
- socket与http协议
- HTTP协议+socket编程
- socket实现http协议
- Java 从底层socket实现http服务器
- SVN基于http协议
- socket实现http发送接收-<草稿>
- socket解析http协议头
- http网络协议与Socket
- 100层楼和两个玻璃球的问题
- Tomcat Manager 用户名和密码配置
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
- 《C++标准程序库》第三章摘录与笔记
- Android进阶(二)-------总结4种线程中操作UI界面的方法
- 底层socket接收基于http协议数据处理
- ODBC OLEDB ADO等数据库访问技术
- Extjs学习 数据模型Molde
- 解决“确实允许此网页访问剪贴板吗?”弹出框
- Shell基本命令的学习(2)
- oracle中sequence序列号
- Ubuntu 输入法fcitx方块乱码解决设置
- Extjs学习 数据代理proxy
- Extjs学习 Store的用法