【发布时间】:2014-08-20 20:17:01
【问题描述】:
我对 TCP 数据流的概念有点困惑。 我有几个可变长度命令,每个命令都以回车符(\r)终止,
for eg:
command 1: C\r;
command 2: NO\r;
command 3: M1234\r;
command 4: N00\r;
就像在 TCP 中一样,这就像一个连续的数据流,像这样"C\rNO\rM1234\rN00\r"
我设置了一个条件来检查回车符('\r'),当我读到回车符时,我将我的数据复制到local_buff 并调用函数'Transmit_Data()' 来处理
基于命令的数据。
我面临的问题是 tcp 的读取功能 我如何确保在单次读取中我只读取一个回车终止的命令。
例如:
在第一次阅读中,我可能会得到数据 "C\r" 或 "C\rNO" 或 "C\rNO\rM1" 或任何其他序列
有什么解决方案,这样我就不会在每次读取 \r 之后读取任何内容,并且只有在下一次读取时才应该读取扩孔数据。
如果我做的事情正确,请查看我的代码
while (1)
{
ercd = tcp_rcv_dat(cepid, cep[i].rcv_buf, sizeof(cep[i].rcv_buf), TMO_FEVR);
/* error or fin check */
if ((ercd < 0) || (ercd == 0))
{
break;
}
char_posit = strchr(cep[i].rcv_buf, '\r');
if (char_posit != NULL)
{
bytes_copy = char_posit - cep[i].rcv_buf;
memcpy(local_buff,cep[i].rcv_buf,bytes_copy);
Transmit_Data(0,cepid,i);
memset(cep[i].rcv_buf,0,sizeof(cep[i].rcv_buf));
}
}
【问题讨论】:
标签: c sockets tcp microcontroller