双机通信2.0-18toptoon漫画漫画

这个是接着1.0版做的,主要是用easyx加了一个可视化界面,时间有点久了,只记得参考了B站上的一个学生成绩管理系统的界面设计,找不到原视频地址了......

#源.cpp

#define _WINSOCK_DEPRECATED_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<stdio.h>//对文件进行操作#include<fstream>#include <vector>#include<string>#include <stdlib.h>#include <winsock2.h>#include <easyx.h>#include <conio.h>#include <windows.h>#include"功能函数.h"#pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll#define BUF_SIZE 1024using namespace std;void send();void recieve();const int WIDTH = 1000;const int HEIGHT = 618;IMAGE leftImg(160, 618);IMAGE rightImg(840, 618);/*左侧按钮主页  ---  显示学生信息查看文件编辑文件加密传输文件接收解密文件,判断解密是否正确退出程序*/int main(){initgraph(WIDTH,HEIGHT);drawLeft(leftImg);drawRight(rightImg);drawInterFace();//鼠标操作ExMessage m;int i=0,x,y,judge(0);while (1){i = 10;m.message = WM_MOUSEWHEEL;//获取一条鼠标或按键信息m = getmessage(EM_MOUSE | EM_KEY);//outtextxy(800, 0, L"被执行");switch (m.message){case WM_LBUTTONDOWN:if (m.x >= 5 && m.x <= 150){//getUpStatus();for (i = 0; i < 6; i++){if (m.y >= leftMenu[i].y&&m.y <= leftMenu[i].y + 30){getUpStatus();leftMenu[i].status = 1;drawLeft(leftImg);drawRight(rightImg);break;}}}if (m.x >= 850 && m.x <= 950 && m.y >= 500 && m.y <= 530&&leftMenu[6].status == 2){getUpStatus();leftMenu[6].status = 1;}if (leftMenu[7].status == 2&& m.x >= 880 && m.x <= 920 && m.y >= 500 && m.y <= 530){getUpStatus();leftMenu[7].status = 1;}if (leftMenu[8].status == 2 && m.x >= 930 && m.x <= 970 && m.y >= 500 && m.y <= 530){getUpStatus();leftMenu[8].status = 1;}break;}if (leftMenu[6].status == 1) i = 2;if (leftMenu[7].status == 1) i = 3;if (leftMenu[8].status == 1) i = 3;switch (i){case 0:getUpStatus();drawInterFace();break;case 1:getUpStatus();checkFile(&x,&y);break;case 2:if (leftMenu[6].status == 1){cleanFile();cleardevice();getUpStatus();initgraph(WIDTH, HEIGHT);drawLeft(leftImg);drawRight(rightImg);drawInterFace();}else{getUpStatus();checkFile(&x, &y);trans1();writeFile(x, y);printButton(leftMenu[6]);leftMenu[6].status = 2;}break;case 3:if (leftMenu[8].status == 1){cleardevice();getUpStatus();initgraph(WIDTH, HEIGHT);drawLeft(leftImg);drawRight(rightImg);drawInterFace();}else if (leftMenu[7].status == 1){cleardevice();getUpStatus();initgraph(WIDTH, HEIGHT);drawLeft(leftImg);drawRight(rightImg);drawInterFace();send();}else{getUpStatus();int secret;secret = getSecret();encryptFile(secret);printButton(leftMenu[7]);printButton(leftMenu[8]);leftMenu[8].status = 2;leftMenu[7].status = 2;}break;case 4:recieve();break;case 5:goto end;break;}}end:closegraph();// Close the graphics windowreturn 0;}void send()//传输加密后的文件{initgraph(1000, 618);// 创建绘图窗口,大小为 640x480 像素//先检查文件是否存在const char *filename = "C:\\Cprograme\\trans.txt";  //文件名FILE *fp = fopen(filename, "r+");  //以二进制方式打开文件if (fp == NULL) {outtextxy(160, 20, L"文件读取失败");return;}WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET servSock = socket(AF_INET, SOCK_STREAM, 0);sockaddr_in sockAddr;memset(&sockAddr, 0, sizeof(sockAddr));sockAddr.sin_family = PF_INET;sockAddr.sin_addr.s_addr = inet_addr("10.122.251.36");cleardevice();getUpStatus();initgraph(WIDTH, HEIGHT);drawLeft(leftImg);drawRight(rightImg);settextcolor(RGB(0, 122, 204));settextstyle(40, 0, _T("黑体"));outtextxy(160, 60, L"IPV4:10.122.251.36");sockAddr.sin_port = htons(6565);settextcolor(RGB(0, 122, 204));settextstyle(40, 0, _T("黑体"));outtextxy(160, 100, L"端口:6565");bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));listen(servSock, 20);SOCKADDR clntAddr;int nSize = sizeof(SOCKADDR);outtextxy(160, 140, L"读取数据中...");outtextxy(160, 180, L"数据读取完毕,等待客户端接收中...");SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);//循环发送数据,直到文件结尾char buffer[BUF_SIZE] = { 0 };  //缓冲区int nCount;while ((nCount = fread(buffer, 1, BUF_SIZE, fp)) > 0) {send(clntSock, buffer, nCount, 0);}shutdown(clntSock, SD_SEND);  //文件读取完毕,断开输出流,向客户端发送FIN包recv(clntSock, buffer, BUF_SIZE, 0);  //阻塞,等待客户端接收完毕fclose(fp);closesocket(clntSock);closesocket(servSock);WSACleanup();system("pause");outtextxy(160, 220, L"传输成功!");}void recieve() {//先输入文件名,看文件是否能创建成功wchar_t s[30];InputBox(s, 30, L"请输入文件名(data.txt)");FILE *fp = fopen(WideChartoAnsi(s), "r+");  //以二进制方式打开(创建)文件if (fp == NULL) {IMAGE rightImg(840, 618);drawRight(rightImg);settextcolor(RGB(0, 122, 204));settextstyle(40, 0, _T("黑体"));outtextxy(161, 20, L"找不到该文件");//outtextxy(0, 40, s);//_getch();//closegraph();return;}WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);sockaddr_in sockAddr;memset(&sockAddr, 0, sizeof(sockAddr));sockAddr.sin_family = PF_INET;sockAddr.sin_addr.s_addr = inet_addr("10.122.220.155");//发送放ipv4,待定IMAGE rightImg(840, 618);drawRight(rightImg);settextcolor(RGB(0, 122, 204));settextstyle(40, 0, _T("黑体"));outtextxy(161, 20, L"发送方IPV4:10.122.220.155");sockAddr.sin_port = htons(6565);                     //与发送方保持一致outtextxy(161, 60, L"发送方端口:6565");connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));//循环接收数据,直到文件传输完毕outtextxy(161, 100, L"等待与发送方建立连接...");char buffer[BUF_SIZE] = { 0 };  //文件缓冲区int nCount;while ((nCount = recv(sock, buffer, BUF_SIZE, 0)) > 0) {fwrite(buffer, nCount, 1, fp);}outtextxy(161, 140, L"文件接收成功,按任意键开始比对传输结果");//文件接收完毕后直接关闭套接字,无需调用shutdown()fclose(fp);closesocket(sock);WSACleanup();system("pause");_getch();transs();check();}

#功能函数.h

#include <easyx.h>#include <conio.h>#include<fstream>#include<iostream>#include <windows.h>using namespace std;typedef struct btNode{int x, y;wchar_t text[20];//内容int status;// 0--默认状态 1--按下}btNode;btNode leftMenu[9]{{5,5,L"     显示主页信息",0},{5,55,L"    查看data.txt文件",0},{5,105,L"    编辑data.txt文件",0},{5,155,L" 加密传输data.txt文件",0},{5,205,L"    接收data.txt文件",0},{5,255,L"          退出程序",0},{850,500,L"清空全部内容",0},{880,500,L"发送",0},{930,500,L"取消",0}};//绘制按钮void printButton(btNode t){if (t.x == 5){if (t.status == 0)setfillcolor(WHITE);elsesetfillcolor(RGB(123, 255, 255));settextcolor(RGB(84, 193, 224));setbkmode(TRANSPARENT);fillroundrect(t.x, t.y, t.x + 145, t.y + 30, 10, 10);outtextxy(t.x + 1, t.y + 5, t.text);}if (t.x == 850){if (t.status == 0)setfillcolor(WHITE);elsesetfillcolor(RGB(123, 255, 255));settextcolor(BLACK);setbkmode(TRANSPARENT);fillroundrect(t.x, t.y, t.x + 100, t.y + 30, 10, 10);outtextxy(t.x + 1, t.y + 5, t.text);}if (t.x == 880 || t.x == 930){if (t.status == 0)setfillcolor(WHITE);elsesetfillcolor(RGB(123, 255, 255));settextcolor(BLACK);setbkmode(TRANSPARENT);fillroundrect(t.x, t.y, t.x + 40, t.y + 30, 10, 10);outtextxy(t.x + 8, t.y + 10, t.text);}}//绘制左侧功能按钮区void drawLeft(IMAGE leftImg){settextstyle(20, 0, _T("微软雅黑"));SetWorkingImage(&leftImg);setbkcolor(RGB(168, 226, 238));cleardevice();SetWorkingImage();putimage(0, 0, &leftImg);//绘制按钮for (int i = 0; i < 6; i++)printButton(leftMenu[i]);}//绘制右侧显示区void drawRight(IMAGE rightImg){SetWorkingImage(&rightImg);setbkcolor(RGB(232, 232, 232));cleardevice();SetWorkingImage();putimage(161, 0, &rightImg);}//显示主页信息void drawInterFace(){settextcolor(RGB(0, 122, 204));settextstyle(50, 0, _T("黑体"));outtextxy(350, 120, L"欢迎使用双机通信系统");settextstyle(23, 0, _T("黑体"));outtextxy(700, 180, L"版本:V2.0");outtextxy(700, 210, L"作者:BUPT.S");}//初始化status数值void getUpStatus(){for (int i = 0; i < 9; i++)leftMenu[i].status = 0;}//借助trans.txt文件实现文件真正的编辑void trans1(){fstream ofile;ofile.open("C:\\Cprograme\\idata.txt", ios::in);fstream infile;infile.open("C:\\Cprograme\\trans.txt", ios::out);char c;while ((c = ofile.get()) != EOF){infile << c;}infile.close();ofile.close();}void trans2(char ch){fstream ofile;ofile.open("C:\\Cprograme\\trans.txt", ios::app);ofile << ch;ofile.close();}void trans3(){fstream ofile;ofile.open("C:\\Cprograme\\trans.txt", ios::in);fstream infile;infile.open("C:\\Cprograme\\idata.txt", ios::out);char c;while ((c = ofile.get()) != EOF){infile << c;}infile.close();ofile.close();}//查看明文void checkFile(int *add_x,int *add_y, int x1 = 210, int y1 = 60){fstream infile;infile.open("C:\\Cprograme\\idata.txt", ios::in);if (!infile.is_open()){IMAGE rightImg(840, 618);drawRight(rightImg);settextcolor(RGB(0, 122, 204));settextstyle(40, 0, _T("黑体"));outtextxy(160, 20, L"文件读取失败");return;}IMAGE rightImg(840, 618);drawRight(rightImg);settextcolor(BLACK);settextstyle(30, 0, _T("黑体"));outtextxy(160, 20, L"明文:");settextstyle(15, 0, _T("黑体"));char c;for (y1; y1 < 600; y1 += 20){for (x1; x1 < 950; x1 += 8){if ((c = infile.get()) == EOF) break;if (c == '\n'){x1 = 202;y1 += 20;}if (c != 32 || x1 != 200){outtextxy(x1, y1, c);Sleep(10);}}if ((c = infile.get()) == EOF) break;x1 = 210;}infile.close();*add_x = x1;*add_y = y1;}//编辑文件信息void writeFile(int x1, int y1){wchar_t s[1000];InputBox(s, 92, NULL, L"请输入内容", NULL, 0, 1, true);int i = 0;while (s[i] != '\0'){outtextxy(x1, y1, s[i]);trans2(s[i]);i++;if (x1 < 950){x1 += 8;}else{x1 = 210;y1 += 20;}if (s[i + 1] == '\n'||s[i+2]=='\n'){x1 = 210;y1 += 20;i += 2;trans2(s[i + 1]);}}// 按任意键退出trans3();return;}//清除idata.txt文件内容void cleanFile(){fstream infile;infile.open("C:\\Cprograme\\idata.txt", ios::out);infile.close();}//得到密钥int getSecret(){    // 定义字符串缓冲区,并接收用户输入wchar_t s[10];InputBox(s, 10, L"请输入密钥");// 将用户输入转换为数字int r = _wtoi(s);return r;}//加密文件void encryptFile(const int num)//加密文件{ifstream infile("c://Cprograme//idata.txt");fstream ofile;ofile.open("C:\\Cprograme\\trans.txt", ios::out);infile >> noskipws;//cout << "\n暗文:\n";IMAGE rightImg(840, 618);drawRight(rightImg);settextcolor(BLACK);settextstyle(30, 0, _T("黑体"));outtextxy(160, 20, L"暗文:");settextstyle(15, 0, _T("黑体"));char a, b;while (infile >> a){if ((a >= 'a'&&a <= 'z') || (a >= 'A'&&a <= 'Z')){(a + 32) > 'z' ? b = a - 32 : b = a + 32;if (b == a - 32){b + num > 'Z' ? b = b + num - 26 : b = b + num;}if (b == a + 32){b + num > 'z' ? b = b + num - 26 : b = b + num;}}else b = a;ofile << b;}ofile.close();ifstream oofile("c://Cprograme//trans.txt");char c;int x1 = 210, y1 = 60;for (y1; y1 < 600; y1 += 20){for (x1; x1 < 950; x1 += 8){if ((c = oofile.get()) == EOF) break;if (c == '\n'){x1 = 202;y1 += 20;}if (c != 32 || x1 != 200){outtextxy(x1, y1, c);Sleep(10);}}if ((c = oofile.get()) == EOF) break;x1 = 210;}infile.close();ofile.close();}//UNICODE转ANSI(wchar_t转为const char*的函数)char* WideChartoAnsi(wchar_t * pWideChar){if (NULL == pWideChar)return NULL;char* pAnsi = NULL;int needBytes = WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, NULL, 0, NULL, NULL);if (needBytes > 0){pAnsi = new char[needBytes + 1];ZeroMemory(pAnsi, needBytes + 1);WideCharToMultiByte(CP_ACP, 0, pWideChar, -1, pAnsi, needBytes, NULL, NULL);}return pAnsi;}int getFileSize(const char *filename){fstream infile;infile.open(filename, ios::in);char c;int num=0;if (infile.is_open()){while ((c = infile.get()) != EOF){num++;}infile.close();return num;}elseinfile.close();return 0;}void check(){IMAGE rightImg(840, 618);drawRight(rightImg);settextstyle(40, 0, _T("黑体"));outtextxy(161, 20, L"应该接收的字符数为:");outtextxy(161, 60, L"实际接收的字符数为:");settextcolor(RED);const char*filename1 = "C:\\Cprograme\\idata.txt";TCHAR s[5];_stprintf(s, _T("%d"), getFileSize(filename1));// 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(550, 20, s);//outtextxy(461, 20, getFileSize(filename1));const char*filename2 = "C:\\Cprograme\\data.txt";//outtextxy(461, 60, getFileSize(filename2));TCHAR ss[5];_stprintf(ss, _T("%d"), getFileSize(filename2));// 高版本 VC 推荐使用 _stprintf_s 函数outtextxy(550, 60, ss);settextcolor(BLACK);outtextxy(161, 100, L"传输的正确率为:");int real = (getFileSize(filename2) / getFileSize(filename1))*100;if (real != 100){outtextxy(421, 100, real);outtextxy(351, 100, L"%");outtextxy(161, 140, L"解码失败");}if (real == 100){outtextxy(461, 100, L"100%");outtextxy(161, 140, L"解码成功!");}}void transs(){ifstream infile("c:\\Cprograme\\data.txt");fstream ofile;ofile.open("C:\\Cprograme\\text.txt", ios::out);infile >> noskipws;char a;int num(0);while (infile >> a){if (a == '\n'){if (num == 1){ofile << a;}elsenum++;}else{ofile << a;num = 0;}}ofile.close();ifstream ifile("C://Cprograme//text.txt");fstream oofile;oofile.open("C:\\Cprograme\\data.txt", ios::out);ifile >> noskipws;char b;while (ifile >> b){oofile << b;}oofile.close();}

关上门偷偷来...已无法满足熙俊与妍书这对夫妻。他们开始走向户外,追求各种刺激的新鲜感。
2023-05-13
出道7年的女偶像-宝妍,名气渐渐走下坡,为摆脱演艺之路的窘境及维持生计,她决定转战成人电影,找上业界知名导演寻求合作。签约当天,导演临时提出检验宝妍身体的要求…“如果妳愿意脱,我就提高两倍酬劳!”
2023-05-13
静娴与忠凯是假日夫妻。某天,他们的隔壁搬来了一对準新人。对于在床上总是感到不满足的静娴来说,男邻居的诱惑是如此的难以招架…
2023-05-13
突然失去超能力,从英雄坠落为普通人的贤成最终被心爱的人抛弃。陷入绝望的贤成遇见了同病相怜的佳英。那一天对贤成和佳英来说是人生逆转的契机…!
2023-05-13
吸血鬼与人类的混血朴亦岚因幼时遇到过的一些事,导致无法喝血。 若想在不喝血的情况下继续活下去就必须变成人类,而若想变成人类就必须吸食真正心爱之人的血!? 终于有一天,一名令亦岚心仪的男子出现在了他的面前!亦岚究竟能否得到人类(?)的爱情?
2023-05-20
我的初恋小橘有着出众的外貌,因为父亲再婚让我们成了兄妹。由于不明的原因,她开始疏远我,直到我上大学后某次返家,撞见了她的秘密…
2023-05-13
虽然玄秀拥有优秀的妻子,但他的夫妻生活并不美满。麵对公司火辣女同事的诱惑,他该如何选择呢...
2023-05-13
一介鲁蛇住进明星导演的豪宅,身为屋子裏唯一的雄性动物,一进门就感受到女人们的饑渴难耐...
2023-05-13
AI少女为了防止人类灭绝,带着使命来拯救地球,意外展开一连串的爱爱之旅!
2023-05-13
混混们经常光临的便利店,在那里兼职的余以俊虽然因为太危险想要辞职,但是工资是其他便利店的1.2倍!非常想要赚钱的以俊无视那些威胁继续兼职,但是某天却遇见比混混更像混混的范建祐他出现之后,其他混混都安静了…他可以继续平安无事的兼职么?
2023-05-19