tcp通信问题
来源:互联网 发布:魔据大数据培训怎么样 编辑:程序博客网 时间:2024/06/07 03:46
一、区别一帧:
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 )
{
//重新连接
//如果重新连接成功,发送登入
}
}
}
- tcp通信问题
- SL4+net.tcp通信问题
- TCP通信丢包问题
- TCP通信中的粘包问题
- socket—TCP通信死锁问题
- Mina-tcp与NIO通信问题
- TCP 通信
- TCP 通信
- TCP通信
- TCP-通信
- TCP通信
- Tcp通信
- TCP通信
- TCP通信
- TCP通信
- TCP通信
- TCP 通信
- TCP通信
- 设置文件夹权限为 777
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 1 - 使用Support Library ]
- VC对环境变量的获取与封装
- android ADT最新版本v21.0
- PCA的一点理解
- tcp通信问题
- java定时器使用
- Unity3d制作简单拼图游戏 .
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 2 - 新建一个Fragment ]
- java 如何让一组数每隔几秒变颜色一个
- 【数据结构】哈夫曼编码
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 3 - 创建灵活可变的UI ]
- 黑马程序员--html(一)
- android 开机自启动应用程序