原创 VC#通过TCP/IP实现远程控制

2014-9-9 20:42 2833 21 21 分类: MCU/ 嵌入式

 

如何控制对方计算机,有程序人员自己定义.,这里给出核心技术代码并且实现部分控制功能.

这里我们把运行在我们自己电脑上的控制程序叫 Server  被管理电脑运行的程序叫Client

(1)既然是远程控制  那么 得让你和被管理的计算机之间有连接 

(2)有了连接 我们就在我们的Server端发送命令来做我们想要做的事

(3)Client端接收到我们在Server端发送的命令后,在被管理电脑上进行操作,将结果返回给Server端

  那么,我们就来一步一步的来实现

  打开studio2005新建一个控制台程序取名 Server

  以下是Server端程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
  
namespace Server
{
  class Program
  {
    static void Main(string[] args)
    {
      IPAddress ipAd = IPAddress.Parse("10.3.128.240"); // 把IP地址转换为IPAddress的实例
      // 初始化***, 端口为8888
      TcpListener myList = new TcpListener(ipAd, 8888);
      // 开始监听服务器端口
      myList.Start();
      // 输出服务器启动信息
      Console.WriteLine("在8888端口启动服务...");
      Console.WriteLine("本地节点为:" + myList.LocalEndpoint);
      Console.WriteLine("等待连接.....");
  
      // 等待处理接入连接请求
      // 新建立的连接用套接字s表示
      Socket s = myList.AcceptSocket();
      Console.WriteLine("连接来自 " + s.RemoteEndPoint);
  
      //发送命令
      while(s.Connected)
      {
        ASCIIEncoding asen = new ASCIIEncoding();
        Console.WriteLine("请输入指令:n");
        s.Send(asen.GetBytes(Console.ReadLine()));
      //接收返回信息
        byte[] b = new byte[100];
      int k = s.Receive(b);
      for (int i = 0; i < k; i++)
      {
  
        Console.Write(Convert.ToChar(b));
      }
        Console.WriteLine("n已发送命令");
      }
     
    }
  }
}

以下是Client端程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
  
namespace Client
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建客户端套接字
      TcpClient tcpclnt = new TcpClient();
      Console.WriteLine("连接.....");
  
      // 连接服务器
      tcpclnt.Connect("10.3.128.240", 8888);
      Console.WriteLine("已连接");
      // 得到客户端的流
      Stream stm = tcpclnt.GetStream();
      // 接收从服务器返回的信息
      while (tcpclnt.Connected)
      {
        byte[] bb = new byte[100];
        int k = stm.Read(bb, 0, 100);
        string a = null;
        for (int i = 0; i < k; i++)
        {
          a += Convert.ToChar(bb);
        }
        switch (a)
        {
          case "time":
            ASCIIEncoding asen= new ASCIIEncoding();
        byte[] ba=asen.GetBytes(DateTime.Now.TimeOfDay.ToString());
            stm.Write(ba, 0, ba.Length);
            break;
          default:
            break;
        }
      }

这段代码运行后 我们在Server端输入 time 就可以得到对方的系统时间 

  当然你可以在

1
2
3
4
5
6
7
8
9
10
switch (a)
        {
          case "time":
            ASCIIEncoding asen= new ASCIIEncoding();
        byte[] ba=asen.GetBytes(DateTime.Now.TimeOfDay.ToString());
            stm.Write(ba, 0, ba.Length);
            break;
          default:
            break;
        }

这里多加些case来处理不同的命令来做更多的事 比如 关闭计算机 得到当前的进程列表什么的

  当然你也可以通过修改注册表来实现client 的开机自启动

  或者让client自己想多个地方复制,比如U盘什么的,就有了自动传播的功能

  很多功能只要去研究,大家都可以去实现

 

it in st a c

文章评论0条评论)

登录后参与讨论
我要评论
0
21
关闭 站长推荐上一条 /2 下一条