请教winform网络通信设计方案
最近开发一套员工计算机监控系统,遇到了网络通信方面的瓶颈,自己折腾了几天也没解决。
拜托各位大神不吝赐教。
切入正题:
我使用的是TCP/IP协议,用的是TcpListener和TcpClient这2个类来做网络通信。
程序中有多个窗体,有一个主窗体,主窗体上面是电视墙的形式,有很多个图片控件,每一个图片控件都有一个TcpClient,
然后获取了这个TcpClient的NetworkStream,每3秒循环读取客户端那边发送过来的屏幕截图,然后显示。现在又加了几个功能,就是获取客户端的当前运行进程,并在一个新的窗体中显示,还有向客户端发送消息等功能,每一个新功能都是一个新窗体,后面还陆续会增加功能。
在这个地方我不知道要怎么设计了。
单纯的一个主窗体,一个电视墙,一个连接,用着还很好使。
现在在新窗体中增加新功能了,要用到连接,如果把主窗体中的连接传递到新功能的窗体中去继续使用,读取客户端发送过来的数据,可能读取的是图片。或者其他别的数据,就乱了。
我想过,新窗体中再新建一个连接,但是又想到,连接太多了,会不会有性能问题,而且自己也感觉连接多了也不是很好控制,总体感觉是不够优雅,很乱。
所以请各位有这方面经验的大神不吝赐教。
万分感谢。
在线等待解答。
------解决方案--------------------协议!
定义好 通信 和内容的格式 协议,就好处理了.
------解决方案--------------------又一个BT的软件,每3秒发送一次算屏幕截图?如果计算机多了这种网络流量真的不少的,另外这种软件很容易被破,如果要监控的话,觉得还是想想其他折中的方法好了,如果你真的想要看屏幕,建议你看看VNC的源码,不过这个是C++的,这个能动态显示屏幕的变化.
------解决方案--------------------顶楼上,c#屏幕截图太低端了
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------1.对于协议,可以考虑采用TLV格式的协议,这个不懂可以百度.
2.客户端最好只用一个Socket连接,所有的接收进程都放到主窗体,其它功能窗体从主窗体获取;发送的进程可以依具体情况放到各个窗体
------解决方案--------------------udp处理丢包麻烦,简单用直接用tcp就好了.
一般简单的数据格式就是:
包头标志 + 包大小 + 包数据
一般4个字节 4个字节 可变
自己处理粘包问题.
------解决方案--------------------那么复杂干嘛,既然是一个小局域网,客户端开机后,把数据直接写到数据库中,这样你想怎么看就怎么看了