首页 文章 精选 留言 我的

精选列表

搜索[c/c ],共10000篇文章
优秀的个人博客,低调大师

C++获取本机的ip地址程序

#include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库 class CInitSock { public: CInitSock(BYTE minorVer = 2,BYTE majorVer = 2) { WSADATA wsaData; WORD VersionRequset; VersionRequset = MAKEWORD(minorVer,majorVer); //装载winsock库 if (WSAStartup(VersionRequset,&wsaData)!=0) { //装载winsock库失败,推出 exit(0); } } ~CInitSock() { WSACleanup(); } }; 上面是头文件 #include <iostream> #include "a.h" using namespace std; CInitSock Initsock; bool GetIp(); int main() { GetIp(); return 0; } bool GetIp() { char szText[256]; //获取本机主机名称 int iRet; iRet = gethostname(szText,256); int a = WSAGetLastError(); if (iRet!=0) { printf("gethostname() Failed!"); return FALSE; } //通过主机名获取到地址信息 HOSTENT *host = gethostbyname(szText); if (NULL==host) { printf("gethostbyname() Failed!"); return false; } in_addr PcAddr; for (int i=0;;i++) { char *p = host->h_addr_list[i]; if (NULL==p) { break; } memcpy(&(PcAddr.S_un.S_addr),p,host->h_length); char*szIP = ::inet_ntoa(PcAddr); printf("本机的ip地址是:%s\n",szIP); } system("pause"); } 源代码文件

优秀的个人博客,低调大师

c#入门递归求平方和

2008-04-10 15:55 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("请输入最大数n"); int n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(sum(n)); } private static int sum(int n) { int nsum; if (n == 1) nsum = 1; else nsum = n * n + sum(n - 1); return nsum; } } } 本文转自悬魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2010/02/03/1662393.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

C++ Exercises(十七)---网际校验和算法

在《基于ARP协议获取局域网内主机MAC地址》中使用了WinpCap来发送ARP请求,查询局域网内主机MAC地址,这篇来试试直接用Windows API函数来实现,最后再来探索用于IP,TCP,UDP等众多协议的网际校验和算法。 1,查询局域网主机MAC地址 复制代码 #include <WinSock2.h> #include <IPHlpApi.h> #include <iostream> using namespace std; #pragma comment(lib,"Iphlpapi") #pragma comment(lib,"Ws2_32") int _tmain(int argc, _TCHAR* argv[]) { MIB_IPADDRTABLE* pIPAddrTable = (MIB_IPADDRTABLE*)malloc(sizeof(MIB_IPADDRTABLE)); ULONG dwSize=0,dwRetVal=0; if (GetIpAddrTable(pIPAddrTable,&dwSize,0)==ERROR_INSUFFICIENT_BUFFER) { free(pIPAddrTable); pIPAddrTable = (MIB_IPADDRTABLE*)malloc(dwSize); } if ((dwRetVal=GetIpAddrTable(pIPAddrTable,&dwSize,0))==NO_ERROR) { ULONG ulHostIp = ntohl(pIPAddrTable->table[0].dwAddr); //本机IP ULONG ulHostMask = ntohl(pIPAddrTable->table[0].dwMask); //子网掩码 for (ULONG i= 1;i<(~ulHostMask);++i) { static ULONG ulNo = 0; HRESULT hr; IPAddr ipAddr; ULONG pulMac[2]; ULONG ulLen; ipAddr = htonl(i+(ulHostIp&ulHostMask)); memset(pulMac,0xff,sizeof(pulMac)); ulLen = 6; hr = SendARP(ipAddr,0,pulMac,&ulLen); //发送ARP请求 if (ulLen==6) { ulNo++; PBYTE pbHexMax = (PBYTE)pulMac; unsigned char * strIpAddr = (unsigned char *)(&ipAddr); printf("%d:MAC地址% 02X:% 02X:% 02X:% 02X:% 02X:% 02X IP地址% d. % d. % d. % d\n",ulNo,pbHexMax[0],pbHexMax[1],pbHexMax[2],pbHexMax[3],pbHexMax[4],pbHexMax[5],strIpAddr[0],strIpAddr[1],strIpAddr[2],strIpAddr[3]); } } } else { printf("失败"); } printf("结束!\n"); free(pIPAddrTable); return 0; } 复制代码 2,获取本机网卡信息 复制代码 #include <WinSock2.h> #include <IPHlpApi.h> #include <iostream> using namespace std; #pragma comment(lib,"Iphlpapi") #pragma comment(lib,"Ws2_32") int _tmain(int argc, _TCHAR* argv[]) { PIP_ADAPTER_INFO pAdapterInfo; PIP_ADAPTER_INFO pAdapter = NULL; DWORD dwRetVal = 0; pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); dwRetVal = GetAdaptersInfo(pAdapterInfo,&ulOutBufLen); if (dwRetVal==ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen); dwRetVal = GetAdaptersInfo(pAdapterInfo,&ulOutBufLen); } if (dwRetVal==NO_ERROR) { pAdapter = pAdapterInfo; while (pAdapter) { printf("适配器名称:\t% s\n",pAdapter->AdapterName); printf("适配器描述信息:\t% s\n",pAdapter->Description); printf("MAC地址:\t% 02X:% 02X:% 02X:% 02X:% 02X:% 02X\n",pAdapter->Address[0],pAdapter->Address[1], pAdapter->Address[2],pAdapter->Address[3],pAdapter->Address[4],pAdapter->Address[5]); printf("IP地址:\t% s\n",pAdapter->IpAddressList.IpAddress.String); printf("子网掩码:\t% s\n",pAdapter->IpAddressList.IpMask.String); printf("网关地址:\t% s\n",pAdapter->GatewayList.IpAddress.String); if (pAdapter->DhcpEnabled) { printf("DHCP enabled: yes\n"); printf("DHCP服务器:\t% s\n",pAdapter->DhcpServer.IpAddress.String); printf("租约:% ld\n",pAdapter->LeaseObtained); } else { printf("DHCP enabled:no\n"); } if (pAdapter->HaveWins) { printf("Have Wins:Yes\n"); printf("Primary Wins Server:\t% s\n",pAdapter->PrimaryWinsServer.IpAddress.String); printf("Secondary Server:\t% s\n",pAdapter->SecondaryWinsServer.IpAddress.String); } else { printf("Have Wins:No\n"); } pAdapter = pAdapter->Next; } } else { printf("失败\n"); } return 0; } 复制代码 3,网际校验和(internet checksum)算法 IP,TCP,UDP等许多协议的头部都设置了校验和项,计算校验和的算法一般采用网际校验和算法,它将被校验的数据按16位进行划分(若数据字节长度为奇数,则在数据尾部补一个字节0),对每16位求反码和,然后再对和取反码。 复制代码 #include<iostream> #include<fstream> using namespace std; #include<winsock.h> // 本机字节序转换为网络字节序:htons #pragma comment(lib, "WS2_32.LIB") /************************************************************************** * 计算给定数据的校验和 * * 输入参数: * pBuffer 指向需要校验的数据缓冲区 * nSize 需要校验的数据的大小,以字节为单位 * * 返回值: * 16位的校验结果 * **************************************************************************/ unsigned short checksum_calculating(unsigned short *pBuffer, int nSize) { unsigned long dwCksum = 0; // 32位累加和 // 以两字节为单位反复累加 while(nSize > 1) { dwCksum += *pBuffer++; nSize -= sizeof(unsigned short); } // 如果总字节数为奇数则加上最后一个字节 if (nSize) { dwCksum += *(unsigned char*) pBuffer; } // 将位累加和的高位与低位第一次相加 dwCksum = (dwCksum >> 16) + (dwCksum & 0xffff); // 将上一步可能产生的高位进位再次与低位累加 dwCksum += (dwCksum >> 16); // 返回位校验和 return (unsigned short) (~dwCksum); } int main(int argc, char * argv[]) { // 创建输入文件流 ifstream fInfile; fstream fOutfile; // 创建输出文件流 fInfile.open(argv[1], ios::in|ios::binary); // 以二进制方式打开指定的输入文件 fInfile.seekg(0, ios::end); // 把文件指针移到文件末尾 unsigned short wLen = (unsigned short)fInfile.tellg();// 取得输入文件的长度 fInfile.seekg(0, ios::beg); // 文件指针位置初始化 // 定义数据报缓冲区,缓冲区大小为+wLen ,其中为数据报类型字段、长度字段 // 以及校验和字段的长度和,wLen为数据字段长度,即输入文件长度(以字节为单位) char * pBuf = new char[4 + wLen]; pBuf[0] = unsigned char(0xab); // 给数据报类型字段赋值,这里随便弄了个0Xab pBuf[1] = unsigned char(wLen); // 给数据报长度字段赋值 *(unsigned short *)(pBuf + 2) = 0; // 计算校验和之前,校验和字段先置为0 fInfile.read(pBuf+4, wLen); // 根据输入文件填充数据报的数据字段 // 计算校验和并把结果填入到数据报的校验和字段 *(unsigned short *)(pBuf+2) = checksum_calculating((unsigned short *)pBuf,4+wLen); // 输出校验和计算结果 cout.width(4); cout << "校验和为:x" << hex << htons( *(unsigned short *)(pBuf+2) ) << " (以网络顺序显示)"<< endl; // 以二进制方式打开输出文件 fOutfile.open(argv[2],ios::in|ios::out|ios::binary|ios::trunc); // 将pBuf中的数据报写入输出文件 fOutfile.write((char *)pBuf, wLen+4); cout<< "数据报已成功保存在" << argv[2] << "文件中!" << endl; delete [] pBuf; // 释放数据报缓冲区 fInfile.close(); // 关闭输入文件流 fOutfile.close(); // 关闭输出文件流 return 0; } 复制代码 本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2009/01/05/1369761.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

C#变量引用与全局变量

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace Demo{ class Program { static void ShowDouble(ref int val) { val *= 2; Console.WriteLine("val doubled = {0}", val); } static void Main(string[] args) { int val = 5; Console.WriteLine("val = {0}", val); // 5 ShowDouble(ref val); // 同一个内存,10 Console.WriteLine("val = {0}", val); // 10 Console.ReadKey(); } } }using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace Demo{ class Program { static int val; static void ShowDouble() { val *= 2; Console.WriteLine("val doubled = {0}",val); } static void Main(string[] args) { val = 5; Console.WriteLine("val = {0}",val); // 5 ShowDouble(); // 同一个内存,10 Console.WriteLine("val = {0}", val); // 10 Console.ReadKey(); } } }这两段代码效果一样,引用的都是同一个变量!本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6748055.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册