日期:2014-05-18  浏览次数:21291 次

C#Socket大神门进来帮帮忙。
最近在做一个远程控制,远程桌面控制,鼠标和键盘控制和文件传送下载都已经做好了。但这个远程控制做得有点缺点,我现在采用的是最简单的做法,一个client(控制端)一个server(被控制端)。
如:client(控制端)
  private Socket socket;
  private TcpListener listener;

  listener = new TcpListener(Dns.GetHostByName(Dns.GetHostName()).AddressList[0], 5761);
  listener.Start();
  socket = listener.AcceptSocket();
  server(被控制端)
  newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  newSocket.Connect("192.168.1.168", 5761);
  newSocket.Send(myData);
这种做法就是直接在server(被控制端)访问client(控制端,固定IP"192.168.1.168"),然后不断地发送图片,client(控制端,"192.168.1.168")收到图片数据后还原成图片,但这种做法就死死地限定了IP只能在"192.168.1.168"这台机器上控制server(被控制端)了,有没有什么办法让我可以在其它机器也能对server(被控制端)进行控制的?并且可不可以做到多个Client(控制端)都可以获得来自Server(被控制端)的连接请求?有没啊位大神在这方面比较有经验的麻烦指教下,或者给个简单的例子学习学习,谢谢。

------解决方案--------------------
被控制端增加个配置文件,里面记录 IP 地址列表,启动后读取配置文件,取得 IP 地址列表逐个连接发送图片
------解决方案--------------------
你server要有一个用户列表把(长连接)你发送时遍历发送(推),或者客户端跟你要(拉)
------解决方案--------------------
UDP多播
------解决方案--------------------
可以分享下你的代码么,我最近也正在研究你这个....
邮箱:hxz1314520@qq.com
------解决方案--------------------
探讨
引用:
你server要有一个用户列表把(长连接)你发送时遍历发送(推),或者客户端跟你要(拉)

嗯,avphoenixi和bdmh的想法我有想过,但我想做成那种由Server(被控制端)向一个固定IP的机器(简称代理服务器吧)发送请求(这里发送的仅仅是一个连接的请求(包含了IP和端口的信息),但并没有进行图片数据之类的发送),然后Client(控制端)运行后就向代理服务器……

------解决方案--------------------
为什么不直接调用系统的远程桌面组件?
Visual Studio里面工具箱选择项,选择COM组件,里面找到Microsoft RDP Client Control
------解决方案--------------------
探讨

引用:
为什么不直接调用系统的远程桌面组件?
Visual Studio里面工具箱选择项,选择COM组件,里面找到Microsoft RDP Client Control

这个做过,但这个不太符合我所需要的,第一VS的组件远程过去控制被控制端时相当于新开一个用户进去的,所以看到的并不是控制端用户正在操作的界面。第二,VS的这个功能其实就相当于调用系统的mstsc.ms……

------解决方案--------------------
目测楼主想搞一个木马。。
------解决方案--------------------
探讨
引用:
引用:
引用:
你server要有一个用户列表把(长连接)你发送时遍历发送(推),或者客户端跟你要(拉)

嗯,avphoenixi和bdmh的想法我有想过,但我想做成那种由Server(被控制端)向一个固定IP的机器(简称代理服务器吧)发送请求(这里发送的仅仅是一个连接的请求(包含了IP和端口的信息),但并没有进行图片数据之类的发……

------解决方案--------------------
学习一下,上次我也遇到你这个问题的
------解决方案--------------------
感觉没什么办法
------解决方案--------------------
为什么不让server(被控制端)new TcpListener,一旦连上你想让谁主动谁被动还不是程序的事。
或者server(被控制端)一个TcpListener,多个TcpClient,初次连接都通过TcpListener。
------解决方案--------------------
你一开始的设计思路就错了
怎么可能让 server 访问 client,然后主动发图片。

server是干什么的,是接受处理请求。你主动发是个什么意思?

1.server开一个监听端口,接到命令再发送图片。
2.client访问server时,server就可以得到client的ip,做一个传输类,里边是一个TCP directory,key是ip
3.根据命令的ip到传输类里找到tcp directory里对应的那个tcp,没有就添加个新的,有就直接用,以免重复创建造成多次握手
4.server找到与client交互的tcp时,使用它与client交互,至于发图片还是什么的,就随便了。


补充,貌似client还可以控制server的鼠标键盘是吧?
在传输类里增加一条控制tcp,记录当前正在控制server的ip,如果其他client要控制server还可以选择强制中断上一个用户?或者说,通知正在操作server的用户有人尝试操作server是否将控制权转移等等,这样更灵活。而且这条tcp还可以做接受键盘鼠标指令的。

这样一来起码你的程序大概设计思路就对了。