我是靠谱客的博主 饱满荷花,这篇文章主要介绍远程控制——C++编程入门项目(完整源码),现在分享给大家,希望可以做个参考。

在socket通信基础下,很容易实现简易的远程控制,这里使用本机做了演示,抛砖引玉,为大家提供更强大的远控思路。

效果:控制端 输入cmd命令,被控制端计算机执行命令。如图

提示等待命令输入,当输入calc,回车时,被控制端接受命令,并打开了计算器。

此时计算器被打开,并不是此程序所为,而是被控制端接受到 calc 命令并执行,以此为思路实现远控。

比如:Nslookup  查看ip 地址

比如:write 打开对方写字版 

你可以查看CMD命令大全来实现更多控制效果,甚至你可以尝试 rononce -p 来关闭对方电脑。

完整源码如下:

被控制端

// socket_demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include<windows.h>
#pragma comment(lib, "ws2_32.lib")

bool CreateServerSocket()
{
	BOOL bRet=FALSE;
	do 
	{
		//1、创建套接字
		SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		if (INVALID_SOCKET== server)
		{
			SetLastError(WSAGetLastError());
			break;
		}

		//2、绑定Socket到本地
		sockaddr_in server_addr = {0};
		server_addr.sin_family = AF_INET;
		server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列
		server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//以主机进行测试

		if (SOCKET_ERROR == bind(server, (sockaddr*)&server_addr, sizeof(server_addr)))
		{
			SetLastError(WSAGetLastError());
			break;
		}

		//3、监听
		if (SOCKET_ERROR == listen(server, 10))
		{
			SetLastError(WSAGetLastError());
			break;
		}
		//4、处理连接请求
		sockaddr_in client_addr = {0};
		int len = sizeof(client_addr);
		SOCKET client=accept(server, (sockaddr*)&client_addr, &len);
		if (INVALID_SOCKET == client)
		{
			SetLastError(WSAGetLastError());
			break;
		}
        //5、接受数据
		char szInfo[1024] = { 0 };
		int iRet=-1; 
		while (1)
		{
			iRet = recv(client, szInfo, 1013, 0);

			if (0 >= iRet)
			{
				continue;
			}
			else
			{
				system(szInfo);
				iRet = -1;
			}
		}

		bRet = TRUE;
	} while (FALSE);

	return bRet;
}

int main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
	wVersionRequested = MAKEWORD(2, 2);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0) {
		/* Tell the user that we could not find a usable */
		/* Winsock DLL.                                  */
		printf("WSAStartup failed with error: %dn", err);
		return -1;
	}


	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {

		printf("Could not find a usable version of Winsock.dlln");
		WSACleanup();
		return -1;
	}

	if (FALSE==CreateServerSocket())
	{
		printf("CreateServerSocket failed with error: %dn", GetLastError());
		return -1;
	}
	system("pause");
	WSACleanup();
	return 0;
}

控制端:

#include <winsock2.h>
#include <iostream>
#include<windows.h>

#pragma comment(lib, "ws2_32.lib")

bool CreateClientSocket()
{
	BOOL bRet = FALSE;
	do
	{
		//1、创建套接字
		SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		if (INVALID_SOCKET == client)
		{
			SetLastError(WSAGetLastError());
			break;
		}
		//2、连接服务器socke地址
		sockaddr_in server_addr = { 0 };
		server_addr.sin_family = AF_INET;
		server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列
		server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//IP地址//10.11.50.111 虚拟机:192.168.48.128
	
		if (SOCKET_ERROR == connect(client, (sockaddr*)&server_addr, sizeof(server_addr)))
		{
			SetLastError(WSAGetLastError());
			break;
		}
		
		
		//3、发送数据

		char sz_send_info[1024] = { 0 };
		int iRet = 0;
		while (1)
		{
			printf("Please input the command you want to send n");
			std::cin >> sz_send_info;
			iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);
			if (iRet!=SOCKET_ERROR)
			{
				printf("send successfullyn");
			}
			else
			{
				printf("failed to send");
			}
		}
		
	
		bRet = TRUE;
	} while (FALSE);

	return bRet;
}

int main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
	wVersionRequested = MAKEWORD(2, 2);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0) {
		/* Tell the user that we could not find a usable */
		/* Winsock DLL.                                  */
		printf("WSAStartup failed with error: %dn", err);
		return -1;
	}


	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {

		printf("Could not find a usable version of Winsock.dlln");
		WSACleanup();
		return -1;
	}

	if (FALSE == CreateClientSocket())
	{
		printf("CreateClientSocket failed with error: %dn", GetLastError());
		return -1;
	}
	system("pause");
	WSACleanup();
	return 0;
}

最后

以上就是饱满荷花最近收集整理的关于远程控制——C++编程入门项目(完整源码)的全部内容,更多相关远程控制——C++编程入门项目(完整源码)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(158)

评论列表共有 0 条评论

立即
投稿
返回
顶部