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

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

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

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

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

    //绑定
bind(server, (SOCKADDR*)&server_addr, sizeof(server_addr));
//监听
listen(server, );//最多可以监听10个连接 SOCKET client; //接收
while (true)
{
client = accept(server, , );
} system("pause");
return ;
while语句:如果不加的话,客户端连接依次,服务端就会关闭。

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

    //在指定的套接字上进行连接
if(connect(server, (SOCKADDR*)&server_addr,sizeof(server_addr)) != )
{
GetDlgItem(IDC_STATIC)->SetWindowText("Connect Failed ");
MessageBox("Connect Failed !");
GetDlgItem(IDC_STATIC)->SetWindowText("No Connection"); return;
}
else
{
GetDlgItem(IDC_STATIC)->SetWindowText("Connect Succeed");
}

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

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

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

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

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

        char Buff[];    //用来保存接收的数据
if (recv(server, Buff, sizeof(Buff), ) != SOCKET_ERROR)
{
//将接收到的数据和Password进行比较
if (strcmp(Buff, "Password") == )
{ }
}

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

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

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

现在来看一下运行效果

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

服务端:

            if (recv(client, password, sizeof(password), ) == SOCKET_ERROR)
{
cout<<"Connot receive client password"<<endl;
}
else
{
if (strcmp(password, "") == )
{
send(client, "TRUE", sizeof("TRUE"), );
cout<<"Password correct"<<endl;
}
else
{
send(client, "FALSE", sizeof("FALSE"), );
cout<<"Password incorrect"<<endl;
}
}

客户端:

                else
{
GetDlgItem(IDC_STATIC)->SetWindowText("Waiting for verifying");
}
if (recv(server, Buff, sizeof(Buff), ) != SOCKET_ERROR)
{
if (strcmp(Buff, "TRUE") == )
{
MessageBox("Password correct");
GetDlgItem(IDC_STATIC)->SetWindowText("Password correct");
}
if (strcmp(Buff, "FALSE") == )
{
MessageBox("Password incorrect");
GetDlgItem(IDC_STATIC)->SetWindowText("Password incorrect");
}
}

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

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. Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)

    一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...

  2. Burpsuite如何抓取使用了SSL或TLS传输的Android App流量

    一.问题分析 一般来说安卓的APP端测试分为两个部分,一个是对APK包层面的检测,如apk本身是否加壳.源代码本身是否有恶意内嵌广告等的测试,另一个就是通过在本地架设代理服务器来抓取app的包分析是否 ...

  3. USACO Section 3.2: Feed Ratios

    直接暴力搜 /* ID: yingzho1 LANG: C++ TASK: ratios */ #include <iostream> #include <fstream> # ...

  4. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  5. 自定义Eclipse的 “宏命令”

    在Eclipse中有些常用的固定的东西可以定义一个“宏命令”,就不用重复地做一些工作.就像在 Preferences > Java > Code Style > Code Templ ...

  6. android backlight

    背光设置是在:设置->声音和显示->亮度,通过进度条来设置的. 文件:packages/apps/Settings/src/com/android/settings/BrightnessP ...

  7. leetcode Database3(Nth Highest Salary<—>Consecutive Numbers<—>Department Highest Salary)

    一.Nth Highest Salary Write a SQL query to get the nth highest salary from the Employee table. +----+ ...

  8. 《OD大数据实战》Storm环境搭建

    一.环境搭建 1. 下载 http://www.apache.org/dyn/closer.lua/storm/apache-storm-0.9.6/apache-storm-0.9.6.tar.gz ...

  9. Linux 查看端口占用并杀掉

    1. 查看端口号占用情况: netstat -apn|grep 80 tcp        0      0 10.65.42.27:80              172.22.142.20:627 ...

  10. xxx cannot be resolved to a type 错误解决方法

    (1)jdk不匹配(或不存在)     项目指定的jdk为“jdk1.6.0_18”,而当前eclipse使用的是“jdk1.6.0_22”.需要在BuildPath | Libraries,中做简单 ...