socket传输来的数据实时处理的问题

tcp协议的socket通信,客户端从服务器接收连续的测量数据,服务器端是每秒25次的测量速度,但是每次测量数据的长度是不定的,并且数据量很大。我按照估算的一次测量数据的... tcp协议的socket通信,客户端从服务器接收连续的测量数据,服务器端是每秒25次的测量速度,但是每次测量数据的长度是不定的,并且数据量很大。我按照估算的一次测量数据的最大值设置socket.Recieve()的buffer,想要对buffer接收到的数据进行及时地处理,如分离出各次数据中的有效数据等。
我在socket的OnRecieve()函数中利用while循环,使buffer接收Recieve()的数据,并将将buffer中接受的内容赋给了字符串变量m。这里我想每隔一段时间对接收到的数据进行一次处理,设置了一个定时器,settimer(1,200,NULL),定义了一个全局字符串变量mstr,在ontimer()函数里,,mstr+=m,并开一个线程对mstr进行处理。
不知道这种做法是否可行
展开
 我来答
cooke1234
2014-05-07 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3600万
展开全部
这种做法可以。不过,还可以更节省性能(buffer给m,m又给mstr,定时器启动,新开线程,相对来说要都有点浪费了)。
你可以这样,开一个线程,循环等待数据(包括buffer的数据)。然后用socket去接收数据到buffer中,接收以后,把buffer扔给线程去处理,再新开一个buffer用于下次接收。线程里收到buffer数据后,生成字符串,再把字符串跨线程送给画面显示(如果有显示要求的话)。
socket接收的数据非常频繁,上述性能跟不上的时候,可以使用一个buffer[N]缓存池来替代buffer,避免频繁动态申请内存。
追问
不是很明白 “把buffer扔给线程去处理,再新开一个buffer用于下次接收”
追答
你的代码里的m是干什么用的?不就是为了临时保存buffer的数据,并且传递给mstr嘛。
为什么不省掉m,直接把buffer保存到mstr中不行吗?
百度网友9ef17a0
2014-05-07 · 超过47用户采纳过TA的回答
知道小有建树答主
回答量:78
采纳率:100%
帮助的人:85.8万
展开全部
你是指并发的可行性 还是指大数据量的可行性?
更多追问追答
追问
并发。
追答
你的数据走向是buffer--->m---->mstr,并且m和mstr是一个字符串变量,其实可以把buffer过来的数据直接写到流里面,然后写给一个文件,不要使用字符串变量去存放大数据.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式