最近在做一个远程控制,远程桌面控制,鼠标和键盘控制和文件传送下载都已经做好了。但这个远程控制做得有点缺点,我现在采用的是最简单的做法,一个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(被控制端)的连接请求?有没啊位大神在这方面比较有经验的麻烦指教下,或者给个简单的例子学习学习,谢谢。
如: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(被控制端)的连接请求?有没啊位大神在这方面比较有经验的麻烦指教下,或者给个简单的例子学习学习,谢谢。
邮箱:[email protected]
Visual Studio里面工具箱选择项,选择COM组件,里面找到Microsoft RDP Client Control
或者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还可以做接受键盘鼠标指令的。这样一来起码你的程序大概设计思路就对了。
就算是一对多,也是必须所有client全部开启,或者人家没有发送请求需要数据,你就强制给人家发了。
你這個前提得是我Client(控制端)知道了Server(被控制端)的IP之後才會成立的,如果我並不知道Server(被控制端)的IP的話這失去了意義了。
你见过server的ip是一直变的?
我听过client会变,没听过server会变。
你只要在client增加server ip指定,然后保存以后直接调用就可以了,他只需要设置一次,或者server的ip修改了他才设置。 内网的server ip用自动获取,我就表示你们的设计真的让人无语了。如果是外网,绑定个域名可以么?不就也固定ip了?你们的设计有问题你不听,server要起到server的作用,如果你反过来搞,那就把你所谓的“server”和“client”的词给对方换一下。不要 client 也叫 server,server反而叫client。
server是接收命令的,不是主动访问客户端发送命令的。这种情况不是不存在,而是你的这个功能这么设计本身就是错的。言归于此,不再作解释。
矛盾么?你说server就是client,client就是server,反着叫而已。
那这设计没有问题会出现这种情况?不跟你纠结设计的问题了。反正我说了我的看法,你不做也没关系,我又没赚你钱。你又不给我发工资,不用跟你争论。等你发现问题的时候你自然会改。如果你做的是个毕业设计,我没话说,糊弄过去就行。
如果你做的是个产品,你不改我都佩服你!
没见过这么设计产品的。
那这设计没有问题会出现这种情况?不跟你纠结设计的问题了。反正我说了我的看法,你不做也没关系,我又没赚你钱。你又不给我发工资,不用跟你争论。等你发现问题的时候你自然会改。如果你做的是个毕业设计,我没话说,糊弄过去就行。
如果你做的是个产品,你不改我都佩服你!
没见过这么设计产品的。
其实并不矛盾吧,人家楼主之所以叫server,只不过是因为server端只做命令的处理和数据的发送,server端并没有实际的界面操作,而实际的界面操作都是在client端,也就是楼主所说的控制端了,网上很多源码都是这样啊,难道是我们的设计都有问题?
我只是告诉你,本身这么设计就有问题。
服务端的职责要搞清楚,没必要跟你较劲能不能卖。
如果你只是研究socket能不能通信,通信了能不能控制电脑,那你成功了。
麻烦你仔细看问题,没看明白别乱回答。
他要让服务端主动发送请求给客户端,真叫你给败了。
一个远程控制要让服务端主动给客户端发数据。
而且还要让服务端知道所有客户端的IP, 客户端不需要知道服务端的。
你仔细看了么,你确定么,你会这么设计?
还很多源码都这样。可笑。如果你脑子还想不明白,我帮你分析下他的代码吧:
client(控制端) //这里看清楚了吧,client端
private Socket socket;
private TcpListener listener; listener = new TcpListener(Dns.GetHostByName(Dns.GetHostName()).AddressList[0], 5761);
listener.Start();
socket = listener.AcceptSocket();//client端一直监听被控制端的请求,所以就这一句就已经明白他的意思了。 server(被控制端)//这里人家叫server,而以你的意思这里就非得叫client
newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
newSocket.Connect("192.168.1.168", 5761);//这里就是向他的client请求连接了,明白?
newSocket.Send(myData);
所以他说得够直白了,都不知道你是什么鸟程序员。
连个Linq查询都不会的人,别跟我谈设计好么。
你工作多久?半年都没到?还是根本就是个学生。等你真的学会设计了以后再回头看看这个问题,你会发现你的回答多么可笑。