中国开发网: 论坛: 程序员情感CBD: 贴子 267629
haitao
【技术贴-linux/c】还是要写uclinux下的串口转TCP的代码。。。
对于实现机制、代码框架有点吃不准:
1、简单的主循环轮询:
while (1)
{
if (read(commhandle,buf,maxbuf,timeout,buflen)) //读串口文件句柄,到buf,最多读maxbuf字节,如果timeout毫秒内没读满maxbuf也返回,实际读到的字节数存到buflen
{发送到sockhandle}
if (read(sockhandle,buf,maxbuf,timeout,buflen)) //读TCP句柄,到buf,最多读maxbuf字节,如果timeout毫秒内没读满maxbuf也返回,实际读到的字节数存到buflen
{发送到commhandle}
}
为了避免读取和发送的时间太长,而影响对另一个handle的响应而导致它的接收缓冲溢出,maxbuf/timeout都必须足够小

2、简单的主循环select:
while (1)
{
fd=select(...) //串口和TCP的fd任何一个有数据,就返回,否则阻塞。。。
读取fd到达数据的部分或全部,并发送到另一个fd
}
为了避免读取和发送的时间太长,而影响对另一个handle的响应而导致它的接收缓冲溢出,每次读取足够小的部分已到达的数据,剩下的在循环的下一次会读取

3、建2个线程,分别阻塞地读取串口和TCP
读串口的线程,如果读到数据,就直接发到TCP
读TCP的线程,如果读到数据,就直接发到串口


哪一个最好呢?或者是不是有现成的源代码??

好像还是第三个技术要求低一点。。。第一个的带最大长度和超时设置的read,不知道怎么写,第二个select的用法也不熟悉。。。
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录