远程控制电脑(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 }
左的是服务器,右边的是客户端..现在客户端能连接服务器,有密码的验证功能..更多功能待续......