初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2013-3-18
- 在线时间
- 5 小时
|
5金钱
别的不说先上实验现象:
现象一:间隔一下有一个错误
01 03 00 00 00 01 84 0A //对
01 00 30 00 00 00 00 00 //错误
01 03 00 00 00 01 84 0A
01 00 30 00 00 00 00 00
01 03 00 00 00 01 84 0A
01 00 30 00 00 00 00 00
01 03 00 00 00 01 84 0A
01 00 30 00 00 00 00 00
不管是服务器还是客户端,在我用上位机连续给其发送数据时接收到的数据如上现象一对一错,但是我单次发送的时候又全部是对的。我分析差不多两天了,求大神们给个指点!
想实现功能测试:接收PC机发送数据处理后再传回上位机(PC机)
接收函数代码如下:
static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
{
unsigned char *data;
unsigned int i,j;
err=ERR_OK;
if(p != NULL)
{
//if(!RecvMark)return;
tcp_recved(pcb, p->tot_len);//获取数据长度 tot_len:tcp数据块的长度
data = p->payload; //取数据首地址
RecvLen = p->tot_len; //取数据长度
//if(RecvLen<10){return err;}
if(RecvLen>1024){pbuf_free(p);return err;}
else
{
j=0;
for(i=0;i<RecvLen;i=i+2)
{
RxHexBuf[j++]=ASCII2Byte(&data);//将数据转换成16进制
}
RecvLenH=RecvLen>>1;
RecvMark=1;
pbuf_free(p); /* 释放该TCP段 */
}
}
else
{
tcp_close(pcb); /* 作为TCP服务器不应主动关闭这个连接? */
}
err = ERR_OK;
return err;
}
//发送函数如下:
void TCP_Server_SendData(unsigned char *DataBuffer,unsigned int DataLen)
{
struct tcp_pcb *cpcb;
for(cpcb = tcp_active_pcbs;cpcb != NULL; cpcb = cpcb->next)
{
tcp_write(newpcb,DataBuffer,DataLen,TCP_WRITE_FLAG_COPY); // payload为TCP数据块的起始位置
tcp_output(cpcb);
}
}
////发送数据操作
TCP_Server_SendData(RxHexBuf,RecvLenH);
|
|