tcp通信问题

一、区别一帧:

1、加头,比如加头0x7E。

2、加相同头尾,比如0x7E内容0x7E。

可能问题:1、如果丢失下一帧的0x7E和部分内容,会影响到上帧的解析

可能的问题:1、7E中间的内容丢失

                      2、尾部的内容部分内容和0x7E丢失。不好区分7E是头还是尾

                      3、7E头和部分内容丢失。不好区分7E是头还是尾

3、加不同头尾,比如0x7E内容0x7F。

不存在以上问题。

 

二、tcp与udp

发送的区别:

tcp底部有缓冲,一次发生的数据可能有两个帧的内容。

udp可以自己控制,一帧帧发送。

建立链路的区别:

udp没有服务器客户端的概念。

tcpip有

传输时间:

udp不可靠传输速度是tcp的1到2倍(不准确)

 

三、处理消息的机制:

1、接收的消息:

      1、紧急消息,消息优先级

      2、短时处理消息,比如设置系统参数。

      3、需要处理很长时间的消息。比如传输文件,必须包含传输心跳。//需要单独开个线程处理

2、主动发送的消息:

3、发送失败重传:

4、大文件上传下载:

5、流水号的作用:

6、设备的注册,注销和接收消息处理使用状态机实现:

根据一套协议写处理的程序都有局限性。发展的眼观看问题。

enum
{
 LOGIN,
 LOGOUT,
 HEART_BEAT,
};

int iState = LOGOUT;
int iType = 0;
DWORD dwCurTm = 0;
DWORD dwLastTm = 0;

while(1)
{
 iType = pop(/*消息*/)

 switch( iType/*收到的协议类型*/ )
 {
 case 0x01:
  {
   iState = LOGIN;
  }
  break;
 case 0x02:
  {
   iState = LOGOUT;
  }
  break;
 }
 
 if( iState == LOGIN )
 {
  switch(iType /*收到的协议类型*/ )
  {
   //处理各种短时间命令,长时间命令发送到另外的线程
  }

  if ( dwCurTm - dwLastTm > 5000 )
  {
   //发送心跳
  }
  
 }
 else if( iState == LOGOUT )
 {
  //发送登入帧
  if ( dwCurTm - dwLastTm > 5000 )
  {
   //重新连接   
   //如果重新连接成功,发送登入
  }
 }
}


 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值