打印

基于OK6410的网络通信协议实现,求助将‘02’合并为一个字...

[复制链接]
465|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本人学生一枚,目前正在自学ARM11,遇到该题目,但是不知道该如何将02合并为一个字符向服务器发送
题目要求:服务端与客户端之间的通信协议规定如下:
数据帧格式为:
0x02 命令 数据项 D3 D2 D1 D0 0x03
共8个字符,除首字符02,结束字符03外,中间5个均为ASCII码字符
命令字符定义如下:
‘R’:读取命令;‘W’:写入命令;‘B’:读取返回;‘P’:写入返回
举例1:如客户端要读取AD通道0的采样值,则发送:
02 ‘R00000’ 03
服务器返回:
02 ‘B00800’ 03     //表示返回的数值为800mV


以下是程序中的输出部分:
while(1)
        {
                char test[2];//test是后来加的想看看0x02与0x03的ASCII对应的输出数据
test[0]=0x02;
                test[1]=0x03;

                     if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))>0) //接收到数据
{
                         buf[recvbytes]='\0';
                         printf("Recieve:%s\n",buf);
                        printf("Test:%s\n",test);
                        HandleTCP(buf,recvbytes);//对收到的数据进行协议处理
                               printf("Return:%s\n",SendBuf);//显示服务器返回的内容

}
else if(recvbytes<=0) //对方断开连接
{   
                                printf("Connetion continue ...\n");
                         close(client_fd);
                                //继续侦听客户端连接
                            client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size);
                 }
        }//End of while
下面是HandleTCP函数:
void HandleTCP(char *bf,int len)//
        {
                int i,RcvPtr;
                     for(i=0;i<len;i++)
                     {
                                if(*(bf+i)==0x02)//判断是否为首字符0x02
                                {
                                 RcvBuf[0]=0x02;
                                 RcvPtr=1;
                               }
                                else if(*(bf+i)==0x03)// )//判断是否为结束字符0x02
                                {
                                   if(RcvPtr==7)ParseFrame();//接收到一个完整的协议包
                                  RcvPtr=0;
                                }
                                else
                                {
                                  if(RcvPtr>0)RcvBuf[RcvPtr++]=*(bf+i);
                                }
                      }//!for
        }
求助:怎样实现客户机发送02 ‘B00800’ 03 时,buf[0]=0x02;buf[7]=0x03;   


1438000837_374712.png (57.66 KB )

1438000837_374712.png

相关帖子

沙发
clod_lfx|  楼主 | 2015-8-22 18:31 | 只看该作者
我还是自己解决吧主要方法就是用了转义字符\,例如“\2”则表示asii码为0x02所表示的字符,最后在QT中实现的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

1

粉丝