首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

TCP/IP通讯

2013-06-26 
TCP/IP通信场景:要用无线网络传送两种数据到服务器端,前一种数据量很小(一些字符串,小于100byte,数据是随

TCP/IP通信
场景:
要用无线网络传送两种数据到服务器端,前一种数据量很小(一些字符串,小于100byte,数据是随机采集的,两次数据采集的间隔时间为100ms~10s之间),后一种数据量很大(jpeg图片,大于100kb,定时采集),无线网络速度10kb/s左右
要求:
前一种数据的传输要保证实时性(延时不能太大),后一种的数据要在第二次采集之前完成传输
问题:
如何用TCP通信完成以上内容?
[解决办法]
在发送图片数据时,检测到如果有其它数据需要发,则先发送其它数据。
这个思路实现应该不难吧。
[解决办法]
按理说,你的图片应该是在一个线程里面发送的,而其他数据在另一个线程,而发送图片时间很长,分包发送必然循环,系统自己会协调好两个线程的时间片,除非你修改了优先级。

不过我并不清楚你的程序框架,说的并不一定就对。
你或者可以建立一个发送线程,用一个链表保存所有要发送的数据包,而你其他数据不管是不是图片都添加到链表中,如果是图片分包时一个一个从后面加入,需要及时发送数据插到链表头。这样就能保证。
分1k大小是可以的。然后按照顺序发送,服务器收到直接写文件就可以了,因为tcp是保证先发先到的。
不过你还要设计tcp协议,告诉服务器一些必要信息,如文件名,文件是否传完等等信息。

[解决办法]
3个线程访问一个socket会有问题。你用2个线程+2个socket就可以了,小数据发送的线程th1,大图片发送的线程th2,优先级设置为th1>th2,th1一直等待发送数据,一有就马上发送。th2将一个大图片分割成很多小数据,比如1K每个,在循环中发送。如果小数据需要发送时,th1应该会马上执行,因为优先级比th2高。th2会暂停一下。等待th1发送完毕后,th2会继续发送。之所以将th2的大图片分割为很多小数据,1是因为大数据发送时,会因为超过MTU而分包,2是,如果一次就发送很大数据,因为发送的调用最终会进入内核,这个时候可能是th1打断不了的。

热点排行