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
------解决方案--------------------
------解决方案--------------------为什么不直接调用系统的远程桌面组件?
Visual Studio里面工具箱选择项,选择COM组件,里面找到Microsoft RDP Client Control
------解决方案--------------------
------解决方案--------------------目测楼主想搞一个木马。。
------解决方案--------------------
------解决方案--------------------学习一下,上次我也遇到你这个问题的
------解决方案-------------------- 感觉没什么办法
------解决方案--------------------为什么不让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还可以做接受键盘鼠标指令的。
这样一来起码你的程序大概设计思路就对了。