远程控制电脑(3)

1.客户端和服务器之间数据的接收,验证,发送。都是借助客服之间绑定的那个socket和端口进行。

2.客户端和服务器我把他们分开编写,便于理解。

3.在1中要用到的主要函数有strcpy()、send()、recv()、strcmp(),最重要的是后面的三个函数,我是参考MSDN的..

4.在进行3之前要有客服之间的通道socket;所以就先要对客服进行socket编程,它主要包括(套接字初始化、套接字创建、套接字绑定、套接字连接)接下了就是具体的代码:

套接字初始化

View Code
1 //全局变量
2 WSADATA wsadata;
3 SOCKET serversocket;
4 SOCKADDR_IN  ssockadd;
5 int cport = 5000;
6 //初始化套接字 在初始化对话框函数中,要在创建对话框时就要有socket
7  WORD ver = MAKEWORD(2,2);
8  WSAStartup(ver, &wsadata);

套接字创建

View Code
1 serversocket = socket(AF_INET, SOCK_STREAM, 0);

套接字连接

View Code
 1 接着上面的
 2 ssockadd.sin_family = AF_INET;
 3       ssockadd.sin_port = htons(cport);
 4      //远程电脑的IP地址
 5       ssockadd.sin_addr.S_un.S_addr = inet_addr(m_addr.LockBuffer());
 6 
 7     //2.连接套接字
 8 
 9      if(connect(serversocket, (SOCKADDR*)&ssockadd, sizeof(ssockadd)) != 0)
10      {
11          MessageBox("服务器连接失败!");
12          GetDlgItem(IDC_STATIC)->SetWindowText("连接服务器失败");
13          Sleep(1000);
14          GetDlgItem(IDC_STATIC)->SetWindowText("无连接");
15          return ;
16      }
17      else
18      {
19          GetDlgItem(IDC_STATIC)->SetWindowText("连接服务器成功");
20          char buffer[100];
21          if (recv(serversocket, buffer, sizeof(buffer), 0) != SOCKET_ERROR)
22          {
23              if (strcmp(buffer,"password") == 0)
24              {
25                  Cpassword dlg;
26                  dlg.DoModal();
27                  char pass[50];
28                  strcpy(pass, m_password.LockBuffer());
29                  if (send(serversocket, pass ,sizeof(pass), 0) == SOCKET_ERROR)
30                  {
31                      MessageBox(_T("数据发送失败!"));
32                      closesocket(serversocket);
33                      return ;
34                  }
35                  else
36                  {
37                      GetDlgItem(IDC_STATIC)->SetWindowText(_T("连接成功...正在验证密码......"));
38                  }
39                  char pass1[50];
40                  recv(serversocket, pass1, sizeof(pass1), 0);
41                  if (strcmp(pass1, "TRUE") == 0)
42                  {
43                      MessageBox(_T("密码正确!"));
44                      GetDlgItem(IDC_STATIC)->SetWindowText(_T("恭喜...密码正确..."));
45                  }
46                  if (strcmp(pass1, "FALSE") == 0)
47                  {
48                      MessageBox(_T("密码不正确..."));
49                      GetDlgItem(IDC_STATIC)->SetWindowText(_T("sorroy...密码错误"));
50                      dlg.DoModal();
51                  }
52              }
53          }
54      }
55 }

上面的是客户端接下来是服务器:

 1 /************************************************************************
 2 服务器
 3 监听客户端的连接 和客户端的套接字编程类似
 4 ************************************************************************/
 5 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 6 {
 7     WSADATA wsadata;
 8     WORD vre = MAKEWORD(2,2);
 9     WSAStartup(vre,&wsadata);
10     SOCKET server;
11     server = socket(AF_INET, SOCK_STREAM, 0);
12     SOCKADDR_IN serveraddr;
13     serveraddr.sin_family           = AF_INET;
14     serveraddr.sin_port             = htons(spot);
15     serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 
16     bind(server, (SOCKADDR*)&serveraddr, sizeof(serveraddr));
17     listen(server, 100);
18     SOCKET soclient;
19     cout<<"please waiting connect..."<<endl;
20     while (1)
21     {
22         soclient = accept(server, 0, 0);
23         if (soclient != INVALID_SOCKET)
24         {
25             if (send(soclient, "password", sizeof("password"), 0) != SOCKET_ERROR)
26             {
27                 cout << "有一个客户端连接服务器...待验证密码......" << endl;
28             }
29             char pass[50];
30             if (recv(soclient, pass, sizeof(pass), 0) == SOCKET_ERROR)
31             {
32                 cout << "无法接收密码!" << endl;
33                 return 0;
34             }
35             else
36             {
37                 if (strcmp(pass, "520521") == 0)
38                 {
39                     send(soclient, "TRUE", sizeof("TRUE"), 0);
40                     cout << "用户密码正确..." << endl;
41                 }
42                 else
43                 {
44                     send(soclient, "FALSE", sizeof("FALSE"), 0);
45                     cout << "用户密码错误..." << endl;
46                 }
47             }
48         }
49     }
50     
51     return 0;
52 }

左的是服务器,右边的是客户端..现在客户端能连接服务器,有密码的验证功能..更多功能待续......

posted @ 2012-12-08 13:16  Jontaer  阅读(281)  评论(0编辑  收藏  举报