本人学生一枚,目前正在自学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;
|