关于c语言的问题,请专家解答

img


ip地址究竟是怎么转换成这种形式的 想不明白,关于c语言的问题,请专家解答 真的苦思冥想了很久 审核手下留情 我不是伸手党

c语言实现将unsigned int转unsigned char形式

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;
 
union IP 
{
    unsigned char char_ip[4];
    unsigned int uint_ip; 
};

 
char* UinttoIp(const unsigned int a)
{
    IP ip;
    ip.uint_ip=a;
    char * pp=new char[20];
    memset(pp,0,20);
 
    for(int i=3;i>=0;i--)
    {
 
        char tmp[4]="";
        snprintf(tmp, sizeof(tmp), "%d", ip.char_ip[i]);
        strcat(pp,tmp);
        if(i>0)
        {
            const char *dot=".";
            strcat(pp,dot);
        }
    }
    return pp;
 
}
 
int main()
{
    unsigned int b=0;
    cin >> b;
    
    cout << UinttoIp(b) << endl;  
    return 0; 
}

效果,输入unsigned int , 输出字符串形式:

img

将无符号整数 (unsigned int) 以字符串 IP 地址的形式进行打印,可以使用位运算和格式化字符串的方法。IP 地址由 4 个字节组成,每个字节取值范围为 0 到 255。IP 地址的字节顺序是从高到低,即从左到右,与常见的点分十进制表示法相反。因此,在打印 IP 地址时,需要按照 bytes[3]、bytes[2]、bytes[1] 和 bytes[0] 的顺序打印字节值,并使用 . 分隔。参考程序如下:

#include <stdio.h>
#include <stdlib.h>

char* getIPAddress(unsigned int ip) {
    char* address = (char*)malloc(16 * sizeof(char));  // 分配足够的内存存储 IP 地址字符串

    // 将无符号整数的字节表示转换为对应的 IP 地址形式
    unsigned char* bytes = (unsigned char*)&ip;
    sprintf(address, "%d.%d.%d.%d", bytes[3], bytes[2], bytes[1], bytes[0]);

    return address;
}

int main() {
    unsigned int ip;

    printf("请输入一个无符号整数作为 IP 地址:");
    scanf("%u", &ip);

    char* ipAddress = getIPAddress(ip);
    printf("IP 地址: %s\n", ipAddress);

    free(ipAddress);  // 释放内存

    return 0;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7636917
  • 除此之外, 这篇博客: [零基础]从购买服务器到编程使用公网ip实现简单通信中的 一、实现思路 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •            这里主讲实现的大致思路和基础理论知识,方便理解之后的操作。

              实现功能:利用公网ip实现简单通信。

              基本步骤:1.购买服务器(搭建服务器)

                                2.登录服务器

                                3.开放服务器的ip地址和端口号

                                4.将应用程序的服务端下载到服务器桌面上

                                5.将应用程序的客户端下载到客户机桌面上

                                6.配置服务端与客户端的ip地址和端口号

             基本理论知识: 

             我会提供测试用的源码和能够直接运行的应用程序。c语言编写。编译器是vs2019社区版。

              应用程序分为服务端和客户端两个。使用TCP/IP协议,需要的参数有ip地址和端口。

              ip地址相当于是你电脑的一个标识,可以理解为身份证或者QQ号,用来区分不同的计算机。ip分为公网ip和私网ip。公网ip是在互联网中使用的,每个ip的归属都是唯一的且不可重复使用。私网ip是用在机房,局域网,公司内部的ip

             想要畅游互联网,则必须要有公网ip才行。一般像哪种联网的软件或者游戏,一定是有一个甚至多个独立的公网ip,并且这个公网ip还是他们公司独有的。而我们平常的这些wifi,手机流量上网,也是有公网ip的。你可以浏览器搜索ip,结果会显示你正在使用的公网ip。但这个公网ip他并不是我们独有的,而是我们非常多的人共用一个。我们上网使用的公网ip是运营商提供的,运营商通过这个公网ip连通了外网,然后运营商又建立了一个私网,也就是运营商内部的网络,将我们都囊括在这个内网当中,再用技术手段打通内网和外网,使得我们也可以通过这个公网ip访问互联网,这个技术应该叫内网穿透,有兴趣的小伙伴可以去了解下。我们实际都是在运营商内部的网络里。 我们对运营商的公网ip是没有控制权的,所以哪些互联网公司才要有自己独有的公网ip。

             公网ip与服务器是购买服务器后就自动绑定好了,直接用就行。客户端ip地址不用管。

             端口就相当于一个通道,给这个程序提供的一个服务端与客户端之间用于通信的专属通道。

              ip地址就是像192.168.0.1这样,端口号取值范围是0-65535。

              客户端发送消息给服务端,服务端接受消息并将之输出在软件界面上,这是我提供的程序所实现的功能。

              客户端通过服务端的公网ip找到服务器,建立连接,然后在我们所提供的端口互相发送消息。

              客户端负责发送消息,且可以有很多个客户端,他们的矛头都对准服务器的公网ip。

              服务端负责接受消息,只有一个,他要接受所有客户端发来的消息,也就是接受所有ip地址发来的消息。

              服务端与客户端的端口号要一致,一般取5000以上,因为5000以下已经被别的软件占用。

              常用端口号:80是网站默认端口,远程桌面默认是3389

              客户端的目标ip填服务器的唯一公网ip。服务端的目标ip地址填0.0.0.0\0,指代所有ip地址,可以接收所有ip地址发来的消息。

              客户端的端口,一般不用管,关闭防火墙即可。

              服务器的端口,默认是关闭的、不允许使用的。因此我们在确立好ip地址后还要开放端口。

              开放端口要设置两处地方,一处服务器系统里的防火墙,一处是网页控制台云服务器中的安全组,后面会讲开放端口的详细操作。

     这些基础的理论全是个人理解和心得,旨在让零基础的伙伴也能在短时间内理解服务器与客户机之间的通信原理。