通讯协议设计
用C语言肯定可以实现!要先在接收端的单片机处理设定好,就是你收到了什么数据,要判定数据是否正确,要是正确的话,就要回复什么数据;不正确就不响应。你可以看看485通信的例子。
『贰』 在计算机网络中,( )是为计算机网络相互连接进行通信而设计的协议。 AHTML BIP
HTML是网页协议,IP是通信
『叁』 请问485通信协议怎么写485芯片的的外围电路怎么设计谢谢!
我不知道您是想知道从机的外围电路 还是主机的外围电路,我给您看一下我参考的两种电路图,使用起来很方便。主机也可以直接用他们的小主机,都不用自己做了。从机自己设计一下就可以了
『肆』 如何设计客户端与服务器双向通信协议
1.
报文头:
l
版本号:
10个字符,以开头,例如:Ver1.0.0.0=Ver1000。
l
报文类型(命令字):
最长不超过20个字符。
l
报文驱动者:
客户端(当前登录的帐号),服务端(当前服务器名)(最长不超过20个字符)。
l
有无参数指示器:
当有参数时,指示器为1,当无参数时,指示器为0。目的是加快解析速度。
l
报文长度:
最长不超过10个字符
l
参数体:
长度可变,但是报文头+参数体不超过2K字节,(相当于2048个char型数据,其中连命令字之间的“,“也包括在里面。)参数与参数之间应用“,”隔开,参数体最大长度为1024个字节,相当于1K
l
整体报文格式:
版本号,报文类型,报文驱动者,参数指示器,报文长度,Value(参数1,参数2,。。。。。。。)
例如:
ABC服务器认证请求的报文:
Ver1000,Login,ABC,0,报文长度,Value()
ABC客户端登录的报文:
Ver1000,Login,ABC,1,报文长度,Value(账号,密码,IP地址)
l
报文结构体:
Struct
Server/CustomMessage
{
char
m_cVersion[10]; //版本号
char m_cCommandType[20]; //报文类型
char m_cDriver[20]; //报文驱动者
char m_cValueSwitch; //参数指示器
char m_cMessageLen[10]; //报文长度
char m_cInputValue[1024]; //参数体
}
2.
具体的报文
定义:->:表示发向那里。
为了明了,以及方便,直接将参数填入结构体内。
设定服务器为ABC,客户端为CDE,Sizeof返回值为字符串。
在“”内表示值为字符串
参数体以Value开头的字符串。
客户端的登录与认证
(命令字与参数)
1、 服务器->客户端:要求客户端把账号、密码等信息传过来。
GetLogin()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“GetLogin”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
2、 服务器<-客户端:客户端上传账号、密码等信息。
Login(账号,密码,IP地址)
struct CustomMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“Login”;
m_cDriver=“CDE”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=“Value(账号,密码,IP地址)”;
}
3、 服务器->客户端:错误提示,表示账号错误,一般为无此账号。
AccountError()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“AccountError”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
4、 服务器->客户端:错误提示,表示账号对,但密码不对。
PasswordError()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“PasswordError”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
5、 服务器->客户端:错误提示,表示帐号被封,请和管理人员联系。
BlockAccount()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“BlockAccount”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
6、 服务器->客户端:错误提示,表示已有相同的帐号登陆。
HaveSameAccount()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“HaveSameAccount”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
7、 服务器<-客户端:客户端已显示错误提示,并将自己与服务器断开
ErrorMsgReceive()
struct CustomMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“ErrorMsgReceive”;
m_cDriver=“CDE”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
8、 服务器->客户端:客户端已通过服务器的认证,服务器向客户端发送帐号,一次最多40个,估计1K左右。
SendCustomList(客户端的账号1,客户端账号2,。。。。。。。)
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“SendCustomList”;
m_cDriver=“ABC”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;
}
9、 服务器<-客户端:表示40个账号已收到
SendCustomOk()
struct CustomMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“SendCustomOk”;
m_cDriver=“CDE”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
10、
服务器->客户端:表示服务器把当前已接入进的所有客户账号发送完毕
SendCustomEnd()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“SendCustomEnd”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
11、
服务器->客户端:向当前已连接上的所有的客户端发送刷新消息,客户端和服务器会重复9、10、11的动作。
FlashCustomList()
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“FlashCustomList”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;
}
12、
服务器<-客户端:表示向某个客户发送消息。
Message(对方客户端帐号,自己客户端帐号,客户信息)
struct CustomMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“Message”;
m_cDriver=“CDE”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=“Value(对方客户端帐号,自己客户端帐号,客户信息)”;
}
13、
服务器->客户端:转发某个客户端的消息给另一个客户端。
Message(对方客户端帐号,客户信息)
struct ServerMessage
{
m_cVersion=“Ver1000”;
m_cCommandType=“Message”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(对方客户端帐号,客户信息)”;
}
『伍』 如何知道别人设计的电路板上的通信协议
大致可以看使用的芯片,根据芯片型号判断什么协议。
一般每一款芯片都有自己的协议支持描述。
比如网上拆卸苹果手机的过程,就可以通过芯片来判断只是什么通信协议。
『陆』 通信协议软件设计为什么很困难(三)
计算机技术和通信技术的融合是目前通信协议软件的必由之路。大的通信公司往往是通过招收大量的计算机专业人才来解决这个问题,在同一个开发团队中,通信专家负责通信协议的设计和分析,而计算机专家负责协议软件的实现。这对于我们这样的高校团队就比较困难了,只能通过让同学在学习通信知识的同时,加强计算机软件方面的训练: 1)要熟悉实时操作系统系统的知识。协议软件的各种功能都是建立在操作系统的基础上的,特别是在通信软件中多个任务同时工作,所以操作系统中的线程管理、线程间通信就变得特别重要。 2)要熟悉计算机网络的知识。核心网已经全都采用基于IP的架构,不了解计算机网络的知识,寸步难行。 3)要熟悉软件工程的知识。通信软件体系庞大,必须通过团队开发来解决,而这都需要软件工程的思想、技术和工具来支撑。 4)要熟悉编程语言的知识。软件无线电和软交换的兴起,使得大量原本采用硬件实现的功能现在都要通过软件实现,软件开发在系统中的作用愈来愈突出,所以熟练地掌握一门甚至多门编程语言已经变得非常必须。 5)要熟悉各种开源工具软件。开源文化的兴起,给研究工作带来了新的机遇,我们可以不必事事从头做起,但是开源也带来新挑战,你必须熟悉开源工具的各种工具,必须接收开源社区自由开发所带来的工具繁多,文档匮乏和零碎所带来各种问题。 6)要学习数据结构的课程。通信软件中充斥着各种队列、图、树之类的描述,如果不熟悉数据结构,对于这些复杂的对象就无从下手。 7)要学习编译原理的知识。当然,用到这一步就比较高深了。通信软件的工作量往往是巨大的,为了提高效率,许多大公司都或多或少地采用一些自动工具,而编译原理就是开发这些自动工具的基础。我们项目中就曾经自己开发过ASN.1的编译生成工具。 想想一个通信的研究生要在两年半的时间中,除了学习通信知识,还要学习这么多的计算机知识,再要完成研究工作,的确是一项艰巨的任务。
『柒』 如何设计一个网络游戏的通信协议和控制协议(在线急等啊,急!急!急!,求大神解答!!)
你这个问得太大了,光是建立服务器就要说上很长时间,还要设计通信协议。建议去看看基本的TCP/IP程序编写,C/S架构程序的编写。
『捌』 如何设计一种串行通信协议
简单的说要做一个协议,首先要考虑你的总线拓扑形式。是点对点的方式传输(是一主一从,还是两个为对等的节点),还是一个主机下挂了多个从节点(节点和主机如何链接,是星形链接、树形链接,还是总线型连接)。
如果是一主一从的点对点那是最简单的。如果是两个对等的节点或者一对多总线节点,那就需要考虑总线竞争、冲突、地址设计、超时处理等问题。
那最简单的主从点对点来说(封闭式网络,即设备节点数确定,且非相设备协议不相同无法接入该网络)。
首先你的波特率设置,最好是所有节点都定一个波特率,有人做过不同波特率通信的,反正我没玩过。而且波特率的大小要从你总线的数据量开销、处理器/控制器的速度、应用的环境中电磁复杂程度、硬件设备的带宽(频率高了会不会受影响,导致丢包率增大,或影响其他设备)
然后一个帧开头应该带有帧标识,让对方判断收到的是数据帧还是应答帧。点对点通信,最少应该具备一个数据命令帧和应答帧。数据命令帧是包含主要设信息的,应答帧是告诉对方是正确否收到数据,如没有,请重发。另外如果收的帧标识都不是这两种的,就说明可能总线出现问题/受干扰/接入其他未知设备。
其次考虑你传输的数据量有多大,是否需要数据包定长。如果传输的数据时而多(十几/几十个个字节),时而少(不到一个字节),那就不能定长。这样的话就需要在第二第三个字节(放帧标识的字节前后)加上包/帧的长度信息。
然后是地址,虽然只有两个点在面对面对话通信,但建议加上源地址和目标地址。这个只是建议,在点对点通信中可选。
之后应该加上一个序列号,用以表示为第几次发送。比如说,我发了一次Hello给你,下一次应该发一个World给你,但你反馈应答帧说没收到或者收到错误,然后我再发一次Hello给你,这时的Hello这帧中的序列号应为2了。
接下来是数据内容……
最后是校验,CRC ……异或……什么的,对前面所有的数据从帧头到帧尾的位做数据校验。防止传输过程中,任何一个bit出错。
现在想到的就是这么点。吐个槽,记得当年我们一组人做铁路信号设备的协议,研究院的人看了我们两周想出来的协议后(基于RS584),说:协议是这么简单就搞出来的么!没试验个一年的工夫都不敢说整出一个安全的强壮的协议来。
『玖』 通信协议的设计(c语言)
我和其他很多人以前分析过文曲星串口的协议
emsky.net上有文章,你去找找几年前的帖子
『拾』 简单谈谈自己通过实验对TCP,HTTP协议的理解,以及对通信协议设计的一些看法.
这个可以从osi的七层模型角度来看。tcp和udp是传输层的协议,通常是用ip协议为回他们的承载层。答而在上面有 表示层 会话层 应用层。这最上面的三层可以统称为应用层,在网络数据传输的过程中可以把它看成是数据date。http属于应用层的协议,只有下四层的网络通了,才能有上层应用的成功使用。所谓的通信协议都处于不同的网络层次,他们的顺序都是由数据封装的顺序来定的。就像你 寄送包裹时 填地址,先填省市区县镇街道 一样。