日期:2014-05-17  浏览次数:20769 次

请教winform网络通信设计方案
最近开发一套员工计算机监控系统,遇到了网络通信方面的瓶颈,自己折腾了几天也没解决。
拜托各位大神不吝赐教。
切入正题:
我使用的是TCP/IP协议,用的是TcpListener和TcpClient这2个类来做网络通信。
程序中有多个窗体,有一个主窗体,主窗体上面是电视墙的形式,有很多个图片控件,每一个图片控件都有一个TcpClient,
然后获取了这个TcpClient的NetworkStream,每3秒循环读取客户端那边发送过来的屏幕截图,然后显示。现在又加了几个功能,就是获取客户端的当前运行进程,并在一个新的窗体中显示,还有向客户端发送消息等功能,每一个新功能都是一个新窗体,后面还陆续会增加功能。
在这个地方我不知道要怎么设计了。
单纯的一个主窗体,一个电视墙,一个连接,用着还很好使。
现在在新窗体中增加新功能了,要用到连接,如果把主窗体中的连接传递到新功能的窗体中去继续使用,读取客户端发送过来的数据,可能读取的是图片。或者其他别的数据,就乱了。
我想过,新窗体中再新建一个连接,但是又想到,连接太多了,会不会有性能问题,而且自己也感觉连接多了也不是很好控制,总体感觉是不够优雅,很乱。
所以请各位有这方面经验的大神不吝赐教。
万分感谢。
在线等待解答。

------解决方案--------------------
协议!
定义好 通信 和内容的格式 协议,就好处理了.
------解决方案--------------------
又一个BT的软件,每3秒发送一次算屏幕截图?如果计算机多了这种网络流量真的不少的,另外这种软件很容易被破,如果要监控的话,觉得还是想想其他折中的方法好了,如果你真的想要看屏幕,建议你看看VNC的源码,不过这个是C++的,这个能动态显示屏幕的变化.
------解决方案--------------------
顶楼上,c#屏幕截图太低端了
------解决方案--------------------
探讨

追加提问:

当局域网之间通信网络流量很大的时候,会影响到广域网吗?

就比如说,我的程序在局域网里面数据发送和接受量达到了10MB每秒,会影响到他浏览网站或者看视频吗?

广域网是电信8兆的专线

------解决方案--------------------
探讨

引用:

又一个BT的软件,每3秒发送一次算屏幕截图?如果计算机多了这种网络流量真的不少的,另外这种软件很容易被破,如果要监控的话,觉得还是想想其他折中的方法好了,如果你真的想要看屏幕,建议你看看VNC的源码,不过这个是C++的,这个能动态显示屏幕的变化.

感谢建议。
我这个是局域网的,机器数量不是很多,也就十几台机器,我截图以后把图片缩小了,最后也就50kb左右了……

------解决方案--------------------
1.对于协议,可以考虑采用TLV格式的协议,这个不懂可以百度.
2.客户端最好只用一个Socket连接,所有的接收进程都放到主窗体,其它功能窗体从主窗体获取;发送的进程可以依具体情况放到各个窗体
------解决方案--------------------
udp处理丢包麻烦,简单用直接用tcp就好了.

一般简单的数据格式就是:
 包头标志 + 包大小 + 包数据
一般4个字节 4个字节 可变

自己处理粘包问题.
------解决方案--------------------
那么复杂干嘛,既然是一个小局域网,客户端开机后,把数据直接写到数据库中,这样你想怎么看就怎么看了