首先服务端是一个win32console应用程序。

在建立项目的时候需要勾选MFC

套接字的初始化同客户端相似:

  1. //对套接字进行初始化
  2. WSADATA wsadata;
  3. WORD ver = MAKEWORD(, );
  4. WSAStartup(ver, &wsadata);
  5.  
  6. SOCKET server;
  7. server = socket(AF_INET, SOCK_STREAM, );
  8.  
  9. SOCKADDR_IN server_addr;
  10. server_addr.sin_family = AF_INET;
  11. server_addr.sin_port = htons();
  12. server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//接收来自所有ip地址的连接

然后进行绑定、监听、接收客户端连接的操作

  1. //绑定
  2. bind(server, (SOCKADDR*)&server_addr, sizeof(server_addr));
  3. //监听
  4. listen(server, );//最多可以监听10个连接
  5.  
  6. SOCKET client;
  7.  
  8. //接收
  9. while (true)
  10. {
  11. client = accept(server, , );
  12. }
  13.  
  14. system("pause");
  15. return ;
while语句:如果不加的话,客户端连接依次,服务端就会关闭。

客户端的代码也需要做出相应修改,如果连接成功会进行一些操作(将状态栏文字修改为:connect succeed)

  1. //在指定的套接字上进行连接
  2. if(connect(server, (SOCKADDR*)&server_addr,sizeof(server_addr)) != )
  3. {
  4. GetDlgItem(IDC_STATIC)->SetWindowText("Connect Failed ");
  5. MessageBox("Connect Failed !");
  6. GetDlgItem(IDC_STATIC)->SetWindowText("No Connection");
  7.  
  8. return;
  9. }
  10. else
  11. {
  12. GetDlgItem(IDC_STATIC)->SetWindowText("Connect Succeed");
  13. }

如果客户端成功的连接,服务端会向客户端发送输入密码的请求:

  1. //服务端正确的接收到了来自客户端的连接
  2. if (client = accept(server, , ) != INVALID_SOCKET)
  3. {
  4. //如果连接成功,会向客户端发送请求,(请求用户输入密码)
  5. send(client, "Password", sizeof ("Password"), );
  6. }

不过,信息也有可能发送失败,需要进行判断一下

  1. //判断是否发送成功
  2. if (send(client, "Password", sizeof ("Password"), ) != SOCKET_ERROR)
  3. {
  4. cout<<"有客户请求连接,等待客户输入密码..."<<endl;
  5. }

接下来进行客户端的编写,客户端接收到Password时,会弹出一个输入密码的窗口,这个窗口需要自己创建

  1. char Buff[]; //用来保存接收的数据
  2. if (recv(server, Buff, sizeof(Buff), ) != SOCKET_ERROR)
  3. {
  4. //将接收到的数据和Password进行比较
  5. if (strcmp(Buff, "Password") == )
  6. {
  7.  
  8. }
  9. }

设计完输入密码对话框,还需要添加到类里面,选择新建MFC类

类名写Password就好,基类选择CDialog,对话框选择刚刚创建的那个对话框的名称,然后确定

  1. //将接收到的数据和Password进行比较
  2. if (strcmp(Buff, "Password") == )
  3. {
  4. //弹出对话框
  5. Password dlg;
  6. dlg.DoModal();
  7. }

现在来看一下运行效果

下面来对输入的密码进行传递及判断

服务端:

  1. if (recv(client, password, sizeof(password), ) == SOCKET_ERROR)
  2. {
  3. cout<<"Connot receive client password"<<endl;
  4. }
  5. else
  6. {
  7. if (strcmp(password, "") == )
  8. {
  9. send(client, "TRUE", sizeof("TRUE"), );
  10. cout<<"Password correct"<<endl;
  11. }
  12. else
  13. {
  14. send(client, "FALSE", sizeof("FALSE"), );
  15. cout<<"Password incorrect"<<endl;
  16. }
  17. }

客户端:

  1. else
  2. {
  3. GetDlgItem(IDC_STATIC)->SetWindowText("Waiting for verifying");
  4. }
  5. if (recv(server, Buff, sizeof(Buff), ) != SOCKET_ERROR)
  6. {
  7. if (strcmp(Buff, "TRUE") == )
  8. {
  9. MessageBox("Password correct");
  10. GetDlgItem(IDC_STATIC)->SetWindowText("Password correct");
  11. }
  12. if (strcmp(Buff, "FALSE") == )
  13. {
  14. MessageBox("Password incorrect");
  15. GetDlgItem(IDC_STATIC)->SetWindowText("Password incorrect");
  16. }
  17. }

由于输入密码和发送密码并不在一个类中,所以需要定义一个全局变量来保存密码

VC远控(二)连接Server端及密码验证的更多相关文章

  1. VC远控(一)界面设计及套接字连接测试

    首先创建一个MFC项目. 选择基于对话框: 勾选Windows套接字 依次拉上各种不同的控件: Edit Control.Button.Tree.Static Text.List.Progress C ...

  2. Zabbix(二) : Zabbix Server端配置文件说明

    Zabbix Server端配置文件说明 # This is a configuration file for Zabbix Server process # To get more informat ...

  3. VC远控(三)磁盘显示

    服务端: 发送与接收命令 DWORD WINAPI SLisen(LPVOID lparam) { SOCKET client = (SOCKET)lparam; COMMAND command; w ...

  4. Kafka(二) —— Server端设计原理

    整理架构 kafka confluence kafka官方文档中文翻译-设计 消息设计 /** * 消息类 * * @author Michael Fang * @since 2019-11-14 * ...

  5. Zabbix(一) : 简介以及Server端安装

    一.什么是Zabbix? zabbix由AlexeiVladishev首先开发,目前在维护的是Zabbix SIA.ZABBIX是一个企业级的开源分布式监控解决方案. zabbix为监控网络和服务器的 ...

  6. server端获得到client端的IP地址的格式

    使用telnet,ping或其他client连接server端时,server端获得的client端的ip地址取决于client端使用的时ipv4还是ipv6地址. 例: client IPv4地址: ...

  7. PHP操作Redis(一) PHP连接Redis,含Redis密码验证、指定某一Redis数据库

    台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实 ...

  8. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  9. delphi xe5 android 开发数据访问server端(二)

    上一篇我们创建了一个拟给手机端访问的webservices服务 接下来创建一个返回数据集的过程,用webservices发布,供手机端调用.这里我使用firedac 1.打开上一篇自动创建的WebMo ...

随机推荐

  1. http://www.cnblogs.com/AloneSword/p/3370462.html

    http://www.cnblogs.com/AloneSword/p/3370462.html

  2. http://blog.csdn.net/sd0902/article/details/8395677

    http://blog.csdn.net/sd0902/article/details/8395677

  3. MatOfPoint作为minAreaRect的参数总是报错"throw new IllegalArgumentException("Incomatible Mat");

    MatOfPoint matPt = contours.get(i)       minRect.set(i, Imgproc.fitEllipse( new  MatOfPoint2f(matPt) ...

  4. R之批处理

    在linux下如何编写脚本调用R语言写的程序呢? R语言进行批处理有2种方式: R CMD BATCH --options scriptfile outputfile Rscript --option ...

  5. OpenMp之false sharing

    关于false sharing的文章,网上一大堆了,不过觉得都不太系统,那么下面着重系统说明一下. 先看看外国佬下的定义: In symmetric multiprocessor (SMP) syst ...

  6. PDO(PHP Data Object),Mysqli,以及对sql注入等问题的解决

    这篇是上一篇 http://www.cnblogs.com/charlesblc/p/5987951.html 的续集. 看有的文章提到mysqli和PDO都支持多重查询,所以下面的url会造成表数据 ...

  7. JavaScript判断浏览器类型及版本

    JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一 ...

  8. 日期选择插件clndr的使用

    需求是:在HTML中绘制日历直接供用户选择 而不是使用datepicker之类的表单插件让用户点击input后弹出datepicker让用户选择 浏览了一些解决方案后,发现  CLNDR 这个jQue ...

  9. [ionic开源项目教程] - 第14讲 ionic解决跨域问题

    [ionic开源项目教程] 第14讲 使用jsonp解决跨域问题 相信很多朋友在开发中都会遇到以下这个问题. No 'Access-Control-Allow-Origin' header is pr ...

  10. HDU 2147 (博弈) kiki's game

    无奈英语不好又被坑,看到棋子能左移下移左下移,想当然地以为是Wythoff博弈了,=u= 题的意思是说每次只能选一个方向移动一步,所以找找规律就是横纵坐标为奇数的时候是必败状态. 从http://ww ...