初学者必看 C++简单的主机间的通信并获取服务器端的Sysinfo信息
来源:互联网 发布:直播视频录制软件 编辑:程序博客网 时间:2024/06/05 18:24
主机间的通信
1,获取Server的Sysinfo信息并发送给Client
2,Server与Client可以纯文字聊天
Server 端:
#include<winsock2.h>#include <windows.h>#include <tchar.h>#include <stdio.h>#include<iostream>#include <VersionHelpers.h>#include <string.h>#pragma comment (lib,"ws2_32")using namespace std;TCHAR* envVarStrings[] ={TEXT("Description "),TEXT("OS = %OS%"),TEXT("PATH = %PATH%"),TEXT("HOMEPATH = %HOMEPATH%"),TEXT("TEMP = %TEMP%")};#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(TCHAR*))#define INFO_BUFFER_SIZE 1000#define MIN_INFO_BUFFER_SIZE 50typedef struct MyStruct //SysInfo结构体声明{TCHAR Os[MIN_INFO_BUFFER_SIZE];TCHAR CName[MIN_INFO_BUFFER_SIZE];TCHAR UserName[MIN_INFO_BUFFER_SIZE];TCHAR SysDir[INFO_BUFFER_SIZE];TCHAR WinDir[INFO_BUFFER_SIZE];TCHAR Envir[ENV_VAR_STRING_COUNT][1000];}dSysInfo,*pdSysInfo;void printError(TCHAR* msg);dSysInfo SysInfo;void getSysInfo() //获取服务器端SysInfo信息并存入结构体{strcpy_s(SysInfo.Os, "Os:");strcpy_s(SysInfo.CName, "ComputerName:");strcpy_s(SysInfo.UserName, "UserName:");strcpy_s(SysInfo.SysDir, "SystemDirectory:");strcpy_s(SysInfo.WinDir, "WindowsDirectory:");strcpy_s(SysInfo.Envir[0], ("\n\nSmall selection of Environment Variables:"));TCHAR infoBuf[INFO_BUFFER_SIZE];TCHAR mininfoBuf[MIN_INFO_BUFFER_SIZE];DWORD bufCharCount = INFO_BUFFER_SIZE;DWORD i;// Get and display the name of the computer. bufCharCount = INFO_BUFFER_SIZE;if (IsWindowsXPOrGreater()) //获取系统版本信息{if (IsWindowsVistaOrGreater()){if (IsWindows7OrGreater()){if (IsWindows8OrGreater()){if (IsWindows8Point1OrGreater()){strcat_s(SysInfo.Os, "Windows8.1\n");}else strcat_s(SysInfo.Os, "Windows8\n");}else strcat_s(SysInfo.Os, "Windows7\n");}else strcat_s(SysInfo.Os, "Vista\n");}else strcat_s(SysInfo.Os, "XP\n");}bufCharCount = MIN_INFO_BUFFER_SIZE;GetComputerName(mininfoBuf, &bufCharCount); //获取主机Namestrcat_s(SysInfo.CName, MIN_INFO_BUFFER_SIZE, mininfoBuf);// Get and display the user name. bufCharCount = MIN_INFO_BUFFER_SIZE; if (GetUserName(mininfoBuf, &bufCharCount)){ //获取用户名strcat_s(SysInfo.UserName, mininfoBuf);}else printf("getUserName error!");// Get and display the system directory. if (GetSystemDirectory(infoBuf, INFO_BUFFER_SIZE)){ strcat_s(SysInfo.SysDir, infoBuf);}// Get and display the Windows directory. if (GetWindowsDirectory(infoBuf, INFO_BUFFER_SIZE)){strcat_s(SysInfo.WinDir, infoBuf);}for (i = 1; i < ENV_VAR_STRING_COUNT + 1; ++i){ExpandEnvironmentStrings(envVarStrings[i], infoBuf,INFO_BUFFER_SIZE);strcpy_s(SysInfo.Envir[i], infoBuf);}}int main(int argc,char * argv[]){char a;getSysInfo();WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET s = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); //套接字s用于监听sockaddr_in sockaddr;sockaddr.sin_family = PF_INET;sockaddr.sin_addr.S_un.S_addr = inet_addr("192.168.26.128");sockaddr.sin_port = htons(827);bind(s, (SOCKADDR*)&sockaddr, sizeof(sockaddr)); //绑定套接字 ip,端口号 char szBuffer[MAXBYTE] = {0};char szBufferAccpet[MAXBYTE] = { 0 }; SOCKADDR clientAddr = {0};int nSize = sizeof (SOCKADDR);SOCKET clientSock;listen(s, 1); //进行监听clientSock = accept(s, (SOCKADDR*)&clientAddr, &nSize); //接受客户端的TCP请求//套接字clientSock 用于发送//send(clientSock, "Hello client \r\n", strlen("Hello client \r\n") + sizeof(char), NULL);send(clientSock, (const char *)&SysInfo, sizeof(dSysInfo), 0); //给客户端发送SysInfo结构体printf("I'm Server\r\n");while (TRUE){ //与客户端进行文字通信recv(clientSock, szBufferAccpet, MAXBYTE, NULL);cout<<"Client:"<<szBufferAccpet<<endl;cout << "Server:";gets_s(szBuffer);send(clientSock,szBuffer, strlen(szBuffer) + sizeof(char), NULL);}closesocket(clientSock);closesocket(s);WSACleanup();cin >> a;return 0;}Client:
#include<iostream>#include<winsock2.h>#pragma comment (lib,"ws2_32")using namespace std;#define ENV_VAR_STRING_COUNT (sizeof(envVarStrings)/sizeof(TCHAR*))#define INFO_BUFFER_SIZE 1000#define MIN_INFO_BUFFER_SIZE 50TCHAR* envVarStrings[] ={TEXT("Description "),TEXT("OS = %OS%"),TEXT("PATH = %PATH%"),TEXT("HOMEPATH = %HOMEPATH%"),TEXT("TEMP = %TEMP%")};typedef struct MyStruct //用于保存Sysinfo并发送给客户端的结构体{TCHAR Os[MIN_INFO_BUFFER_SIZE];TCHAR CName[MIN_INFO_BUFFER_SIZE];TCHAR UserName[MIN_INFO_BUFFER_SIZE];TCHAR SysDir[INFO_BUFFER_SIZE];TCHAR WinDir[INFO_BUFFER_SIZE];TCHAR Envir[ENV_VAR_STRING_COUNT][1000];}dSysInfo, *pdSysInfo;void showInfo(pdSysInfo SysInfo){ //用于显示服务器端发来的SysInfo信息cout << SysInfo->Os << endl;cout << SysInfo->UserName << endl;cout << SysInfo->CName << endl;cout << SysInfo->SysDir << endl;cout << SysInfo->WinDir << endl;for (int i = 0; i < ENV_VAR_STRING_COUNT; i++){cout << SysInfo->Envir[i] << endl;}}int main(int argc, char * argv[]){ char a;WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); //创建套接字sockaddr_in sockAddr;sockAddr.sin_family = PF_INET;sockAddr.sin_addr.S_un.S_addr = inet_addr("192.168.26.128");sockAddr.sin_port = htons(827);char szBufferAccpect[MAXBYTE] = { "NULL" }; //接收服务器端发来的消息储存变量char szBuffer[MAXBYTE] = { "NULL" };char szBuffer1[65595] = { "NULL" };printf("I'm Client\r\n");cout << "Server:" << endl;connect(s,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR)); //给服务器端发送TCP链接请求memset(szBuffer1, 0, 65595);recv(s, szBuffer1, 65595, 0); //接收服务器端发来的SysInfo结构体pdSysInfo SysInfo = (pdSysInfo)szBuffer1;showInfo(SysInfo);cout << "Client:";while (TRUE){ //与服务器端进行文学通信gets_s(szBuffer);send(s, szBuffer, strlen(szBuffer) + sizeof(char), NULL);recv(s, szBufferAccpect, MAXBYTE, NULL);cout<<"Server:"<<szBufferAccpect<<endl;cout << "Client:";}closesocket(s);WSACleanup();cin>>a;return 0;}
0 0
- 初学者必看 C++简单的主机间的通信并获取服务器端的Sysinfo信息
- 简单的CreateRemoteThread例程-初学者必看
- 简单的CreateRemoteThread例程-初学者必看
- 简单的CreateRemoteThread例程-初学者必看
- linux获取系统信息(sysinfo函数的使用)
- CreateRemoteThread 简单的 例程-初学者必看 (非dll注入)
- 获取 主机的信息
- .net的含意思,初学者必看。
- .net的含意思,初学者必看
- AIX初学者必看的五篇文章
- 初学者必看的html基础知识总结
- 初学者必看的Java学习方法
- 初学者必看的Ajax总结篇
- 获取主机的相关信息
- 初学者必看——最简单最清晰的Struts2项目搭建流程
- 绝对经典-- C++初学者必看的50个建议
- 学习c++的50条忠告(初学者必看)
- 学习c++的50条忠告(初学者必看)
- sar 找出系统瓶颈的利器
- Python--字典
- Redis 在新浪微博中的应用
- Android 文件下载(断点、多任务并行下载)
- cocos2d-x学习笔记——cocos2d-x3.0回调函数的变化
- 初学者必看 C++简单的主机间的通信并获取服务器端的Sysinfo信息
- SAT官方每日一题语法题汇总7
- 第八章 多媒体
- office 2010 功能区消失(非最小化)的解决办法
- 玩“赚”微信
- Linux统计/监控工具SAR详细介绍
- Linux fork的运行机制
- HDU 2045 不容易系列之(3)—— LELE的RPG难题
- Oracle ——count(*) 与count(列名)的区别