haitao:
【技术贴-linux/c】还是要写uclinux下的串口转TCP的代码。。。
[阅读: 562] 2005-12-27 15:19:21
对于实现机制、代码框架有点吃不准:
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的用法也不熟悉。。。