首页 新闻 会员 周边

C# socket通信,想在客户端进行实时监控服务端发来的数据,要求可以处理粘包问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-12-07 13:58

C# socket通信,想在客户端进行实时监控服务端发来的数据,要求可以处理粘包问题

Summay的主页 Summay | 初学一级 | 园豆:107
提问于:2013-12-06 16:58
< >
分享
最佳答案
0

http://blog.csdn.net/binghuazh/article/details/4222516

只能贴了,没办法,讲起来太长。关键是你要设计自己的协议。

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-12-06 17:04

你有没有有关socket实用的例子,现在我这个项目用的比较急,我之前还没接触过socket

Summay | 园豆:107 (初学一级) | 2013-12-06 17:08

@Summay: 没有。

Launcher | 园豆:45045 (高人七级) | 2013-12-06 17:12

@Launcher: 

谢谢你

Summay | 园豆:107 (初学一级) | 2013-12-07 13:56
其他回答(3)
0

不知道你的粘包是什么意思!

我也很久没写socket,具体实现技术细节不是记得很清楚了,但是可以分享下其中大的一些架构处理。

socket通讯模式上有2种,一个是短链接另外一个是长链接.

前者主要是用于移动端,因为socket一直不关闭会很耗设备电池。

如果客户端是移动设备,建议就采用短连接方式,其架构为 服务端需要启动2种线程,一个监听线程,一直等待客户端的连接请求,另外一个任务处理线程,处理任务池中的任务。客户端每次发送一个请求后,服务端的监听线程收到此连接请求后,启动一个独立线程,将此连接请求丢到一个任务池(队列)中,同时等待任务处理线程抓取此链接请求并做任务处理。处理完毕后,发送消息给客户端,同时断开此连接请求。

关于包的问题,需要双方协议上约定 每个包的发送大小,在发送数据之前都要获取此包的字节数,如果超过了约定的包大小,则需截包多次发送。为了保证数据的准确性,接受方需要在接受到数据后做出验证。

如果客户端不是移动终端,则第一次链接上后,往复的请求后不要关闭套接字即可。

 

收获园豆:5
斯普劳特【深圳】 | 园豆:24 (初学一级) | 2013-12-06 17:42

谢谢你

支持(0) 反对(0) Summay | 园豆:107 (初学一级) | 2013-12-07 13:56
0

加4位长度的包头表示数据大小,我们公司这样处理的

拖鞋王子 | 园豆:37 (初学一级) | 2013-12-06 21:07

谢谢你

支持(0) 反对(0) Summay | 园豆:107 (初学一级) | 2013-12-07 13:56
0

最讨厌没事乱起名词,装

空明流光 | 园豆:106 (初学一级) | 2013-12-07 08:52

粘包问题一直存在的,我对你不想说什么,如果你不懂你可以上网去查。

支持(0) 反对(0) Summay | 园豆:107 (初学一级) | 2013-12-07 13:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册