转载: http://blog.csdn.net/highfly591/article/details/45309239

1.采用TCP传输时, 应用层为什么要做超时重传:

  tcp保证数据可靠传输,传输成功不代表被对方逻辑层成功处理,此时超时重传解决网络传输功能,但没有被逻辑层成功处理情况,

  有可能是对方应用程序崩溃了,重启后可继续处理~

2.不管过程中是什么数据类型,传输到发送接口的数据必须是char *,并且最好过程中明确统计字符串的长度。

packetLen=(16+cmdInfo.length())*sizeof(char);//对于单纯的string或者qstring可以用c++自带的取长度的函数取字符串长度,如果是对于c的结构体等强制转换成char*后,拼接成的字符串,一定不要用自定义的函数取长度,必须过程中分段求和。

memcpy(cmdpacket,(char *)&dataHeadInfo,16);

memcpy(cmdpacket+16,(char *)(cmdInfo.c_str()),cmdInfo.length());

特别是用过程语言开的。比如qt下,过程中可能用qstring,std::string,到最后都要转换成char *

对于传输结构体类型的协议包头,一定不要把结构体,先转换成string,然后在连接上包体,这样传输过去之后,包头的长度已经不是你结构体的固定长度,在传输到string中时,string是根据你实际占用的长度,分配内存的。肯定小于你固定的结构体的长度。

不要

cHeadInfo为c结构体

typedef    struct headStr
{
    char            magic[6];

char             cmdCount;
    int                infoLen;
    //unsigned long    crcValue;
    uint            crcValue;
}*pHeadInfo,headInfo;//(6+1+1(补齐))+4+4

std::string pHeadInfo(cHeadInfo);

std::string cmdpacket=pHeadInfo.c_str;

在把结构体强制转换成char*后,其中多余的空间可能用\0填充,所以你不应该用cout,或qDebug来打印字符串,因为这样你只能打印出截至第一个\0之前的字符。

并且不要用c++自带的.length(),或者.size.统计你的字符长度,这样它也之后统计你第一个\0之前的字符(有可能是你填充的位之前),这样你就不可能发送完所有的数据

TCP网络传输, 数据类型的问题的更多相关文章

  1. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  2. UNIX网络编程——解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  3. 解决TCP网络传输粘包问题

    很久之前就想写一写关于TCP粘包处理的文章了,无奈一直做WEB开发 没时间研究那个,拖了很久,最近要为一个客户做winform 服务器端,要用到SOCKET就发现了这个问题,这才想起来要解决. 下面用 ...

  4. 网络编程—代码—TCP网络传输

    一.TCP:用字符流传输信息 ------------------------------------------------------------------------------ [用字符流的 ...

  5. 网络传输编程之TCP

    网络传输编程之TCP   网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议 ...

  6. C#网络程序设计(3)网络传输编程之TCP编程

        网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...

  7. 网络学习笔记(二):TCP可靠传输原理

      TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输.TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务.比如:出现差错时,让发 ...

  8. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

  9. TCP/IP协议网络编程以及UDP和TCP之传输协议

    1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...

随机推荐

  1. NFS迁移

    Auth: Jin Date: 20140317 需求将NFS共享IP切换为192.168.201.221,通过192.168.201.0网段提供共享(10.0.0.0和192.168.201.0都能 ...

  2. Vue实例详解与生命周期

    http://www.jianshu.com/p/b5858f1e6e76 Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己 ...

  3. MFC绘制棋盘格

    (1)新建立一个MFC空白的基于视类的工程 (2)在View类中重写OnPaint消息 void CMy005View::OnPaint() { CPaintDC dc(this); // devic ...

  4. ECSHOP中transport.js和jquery冲突的解决方法

    jQuery 和global.js 冲突 百度和google多次,根据网上的大多数建议和自己测试,解决办法如下:删除global.js 或者global.js 文件的10-13行屏蔽//Object. ...

  5. cmd复制粘贴

    右击菜单栏,选择“快速编辑模式” 复制:选择文本后按回车,然后就可以去其他地方粘贴了 粘贴:右击鼠标就可以粘贴内容 简单到都不好意思发布出来了....

  6. iOS:iOS中的几种动画

    本文来自收藏,感谢原创博主. iOS中的动画 摘要 本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动 ...

  7. 吐血整理 Delphi系列书籍 118本(全)

    Delphi 教程 系列书籍 网友(老帅)整理 001_<Delhpi6数据库设计思想与实践> 002_<Delphi6应用开发指南> 003_<Delphi6开发人员指 ...

  8. Delphi中Frame的使用方法(2)

    Frame在写代码时和一般组件有什么不同呢?比如(1)中的客户信息的frame,如果想重写客户编辑按钮的click事件,会发生什么呢: procedure TBusOnSiteManager.Fram ...

  9. HashMap、LinkedHashMap和TreeMap对比

    共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...

  10. php 基于cookie的sessIon机制

    session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据ph ...