当前位置:  技术问答>linux和unix

如何在数据长度不确定的情况下,准确的接受一个TCP数据报

    来源: 互联网  发布时间:2016-03-14

    本文导语:  客户端与服务器建立一个TCP连接,然后发送一个变长的TCP数据请求给服务器,然后服务器根据这个请求做相应的逻辑处理。 我现在的问题是,TCP是一个基于流的协议,譬如read(),recv()系统调用都必须使用确定的长度作...

客户端与服务器建立一个TCP连接,然后发送一个变长的TCP数据请求给服务器,然后服务器根据这个请求做相应的逻辑处理。
我现在的问题是,TCP是一个基于流的协议,譬如read(),recv()系统调用都必须使用确定的长度作为参数,如果长度参数n大于发送过来的数据报的话,那么进程就会一直阻塞,如果使用recv的非阻塞模式调用的话,那么有可能在数据报还没有到来之前recv就返回来了。请问,如何解决这个问题?长度参数n又如何确定呢?

|


================================
就是发送的时候是先发个后续报文的长度,然后在发报文体
这样接收的时候首先接收报文长度,然后在根据这个长度来读取固定长度的报文体。

int tcp_accept(int socketid){
int iAcceptedID;
struct linger TimeOut;
char   caIP[4*4];
unsigned int iLength;
struct sockaddr_in stSockAddr;
do {
        iLength=sizeof(stSockAddr);
        iAcceptedID = accept(socketid,(struct sockaddr*)&stSockAddr,
(unsigned int *)&iLength);
        if (iAcceptedID 

    
 
 

您可能感兴趣的文章:

  • TCP接受数据问题?当一次到达的数据长度大于接受设置的最大长度时怎么办?
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • oracle 实际值超过数据库某个字段指定长度报错解决
  • Oracle数据库表名支持的最大长度是多少
  • 求救:关于结构体数据长度的补位问题
  • 如何将数据库里边的长度超过65535的数据打包发送发送?
  • aio_write函数是不是有最大数据长度限制啊?
  • MSSQL数据库获取TEXT字段的内容长度
  • 不好意思,问个很弱的问题!--关于数据库字段长度过大
  • LONG 类型的数据有长度限制吗?
  • 发送大量数据,socket API最优分包长度为多少?
  • 请问linux下,表示64位长度的数据类型是什么啊?类似于vc里的,__int64
  • 关于几种 c语言内部数据类型的 字节长度
  • java和c/c++ 数据类型长度的比较
  • MSSQL数据类型及长度限制详细说明
  • 怎么子进程关不掉?另外怎样判断在某一个sock可读的情况下数据的长度不为零(有数据)
  • 建立一个ftp数据连接并传送或接受完毕一些数据后,能否不关闭此数据连接,下次接着用?
  • linux串口程序可以发送数据,但是不能接受数据?谁知道原因?
  • linux下用串口接受和发送数据问题
  • 能否设置在UDP接收组播时,就拒绝接受单播数据
  • 2440 串口用查询方式连续接受来自外部的数据 出错!十万火急!!!
  • 请教各位:关于linux处理从网卡接受到的数据包
  • 为什么socket程序使用gdb调试执行就接受不到数据了呢?
  • 我做了个socket服务器,但是客户端接收数据的时候用select()函数????可接受不到
  • recv无法接受数据
  • linux socket 如何接受多帧图像数据
  • (linux c)socket数据接受后判断是否相等的问题
  • 有没有用QT写gps基面以及串口数据接受的?
  • 哪位有java通信方面的经验,谈谈如何利用java编写服务器程序来接受unix主机发送的数据信息?
  • unp发送与接收的时间间隔问题以及接受后的数据包问题!
  • 嗅探程序不能接受发送的数据包
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.print类docflavor的类成员方法:服务格式化打印数据定义及介绍
  • 如何监控数据库的数据,如果数据库数据更改,就通知Server
  • <<大话数据结构>>中冒泡排序算法改进
  • 如何从数据库中或文本文件中提取数据到另一个数据库中?
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • linux下用libpcap库函数抓包,如何判断捕获的数据包是IP数据包还是非IP数据包,顺便说一下、捕获的数据包除了IP数据包之外,还有那些种类,非常感谢!!!
  • c#多线程更新窗口(winform)GUI的数据
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • 基于Hadoop的数据挖掘框架
  • 串口应用程序,当对方发送大量的数据时,本方的数据无法发出。对方停止发送,本方的数据仍然无法发出。不知道是什么原因。
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 公司要给客户做报表,从数据库返回数据,他们死活要返回的格式为Excel格式,请问我怎样才能把数据库返回的数据存为Excel的格式?
  • Linux c++库boost unordered_set数据插入及查找代码举例
  • 数据在页面写不进数据库,也不可以从数据库中读出是什么原因?
  • 文档数据库mongodb与列式数据库hbase详细比较
  • mysql 本地数据库如何从远程数据库导数据
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • 散分:Jbuilder6开发数据库应用请问你们都用什么数据库? 免费的数据库有那些?
  • nosql数据库levedb介绍及levedb最新版1.18下载安装
  • 各位大虾!!如果我用jdbc-odbc桥的数据库驱动,那岂不是当在本地机上做好网站之后,还需要在服务器上重新定义数据苦于数据源!但这是不


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3