我是靠谱客的博主 踏实美女,最近开发中收集的这篇文章主要介绍获取对端IP,端口信息获取对端IP,端口信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

获取对端IP,端口信息

  • 获取对端IP端口信息
      • 服务器端
      • 客户端
      • 各种转换
        • 点分十进制的ip转网络ip
          • 特别的用宏设置ip
        • 网络ip转点分十进制的ip
        • 端口的转换

服务器端

#include "myhead.h"
int tcpsock;
int newsock;
void fun(int sig)
{
    close(tcpsock);
    close(newsock);
    exit(0);
}
// tcp服务器端程序
int main()
{
    // 捕捉ctrl+c
    signal(SIGINT,fun);
    int ret;

    char buf[50];
    bzero(buf,50);
    //定义ipv4类型的地址结构体
    struct sockaddr_in myaddr;
    struct sockaddr_in clientaddr;
    bzero(&myaddr,sizeof(struct sockaddr_in));
    myaddr.sin_family=AF_INET; //ipv4地址协议
    myaddr.sin_port=htons(10000); //字节序的转换  主机转换成网络字节序
    // 点分十进制的ip转换成网络字节序32位ip的四种写法
        //写法一inet_pton(AF_INET,"192.168.1.3",&(myaddr.sin_addr));
    //写法二inet_aton("192.168.1.3",&(myaddr.sin_addr));
    //写法三myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    myaddr.sin_addr.s_addr=inet_addr("192.168.1.16");//方法四
    int sockaddlen=sizeof(struct sockaddr);
    //创建TCP类型的套接字(数据流套接字)
    tcpsock=socket(AF_INET,SOCK_STREAM,0);
    if(tcpsock==-1)
    {
        perror("create socket failed!n");
        return -1;
    }

    //绑定
    ret=bind(tcpsock,(struct sockaddr *)&myaddr,sockaddlen);
    //监听
    listen(tcpsock,5);

    newsock=accept(tcpsock,(struct sockaddr *)&clientaddr,&sockaddlen);


    // 网络字节序ip转换成点分十进制ip的两种写法
    printf("目前连接上服务器的客户端ip是:%sn",inet_ntoa(clientaddr.sin_addr));

    //char ipbuf[16];
    //bzero(ipbuf,16);
    //printf("ip is:%sn",inet_ntop(AF_INET,&(clientaddr.sin_addr),ipbuf,16));
    //printf("ipbuf is:%sn",ipbuf);


    //printf("客户端的IP号是:%dn",ntohl(clientaddr.sin_addr.s_addr));    
    //返回值是主机字节序32位的,不是我们熟悉的点分十进制


    printf("客户端的端口号是:%uhn",ntohs(clientaddr.sin_port));
    //下面这种也会显示数字,可是显示的数字不是给人看到,是电脑看到
    //printf("客户端的端口号是:%uhn",clientaddr.sin_port);

    //接收连接请求
    while(1)
    {

        printf("input string!n");
        scanf("%s",buf);
        write(newsock,buf,50);

    }

}

客户端

#include "myhead.h"
// tcp客户端程序
int main()
{
    int ret;
    char buf[50];
    bzero(buf,50);
    //定义ipv4类型的地址结构体
    struct sockaddr_in myaddr;

    bzero(&myaddr,sizeof(struct sockaddr_in));
    myaddr.sin_family=AF_INET; //ipv4地址协议
    myaddr.sin_port=htons(10000); // 服务器端口号
    myaddr.sin_addr.s_addr=inet_addr("192.168.1.16");  // 服务器的ip地址

    int tcpsock;
    int newsock;
    int sockaddlen=sizeof(struct sockaddr);
    //创建TCP类型的套接字(数据流套接字)
    tcpsock=socket(AF_INET,SOCK_STREAM,0);
    if(tcpsock==-1)
    {
        perror("create socket failed!n");
        return -1;
    }
    connect(tcpsock,(struct sockaddr *)&myaddr,sockaddlen);
    while(1)
    {
        ret=read(tcpsock,buf,50);
        if(ret==0)
        {
            printf("server is disconnect!n");
            break;
        }
        printf("recv is:%sn",buf);
    }
    close(tcpsock);
    return 0;
}

各种转换

点分十进制的ip转网络ip

点分十进制的ip转换成网络字节序32位ip的3种写法

inet_pton(AF_INET,"192.168.1.3",&(myaddr.sin_addr));

inet_aton("192.168.1.3",&(myaddr.sin_addr));

myaddr.sin_addr.s_addr=inet_addr("192.168.1.16");
特别的用宏设置ip
myaddr.sin_addr.s_addr=htonl(INADDR_ANY);

网络ip转点分十进制的ip

网络字节序ip转换成点分十进制ip的两种写法

//方法1
printf("目前连接上服务器的客户端ip是:%sn",inet_ntoa(clientaddr.sin_addr));

//方法2
char ipbuf[16];
bzero(ipbuf,16);
printf("ip is:%sn",inet_ntop(AF_INET,&(clientaddr.sin_addr),ipbuf,16));
printf("ipbuf is:%sn",ipbuf);

//方法3
printf("客户端的IP号是:%dn",ntohl(clientaddr.sin_addr.s_addr));  

端口的转换

myaddr.sin_port=htons(10000); //字节序的转换  主机转换成网络字节序
printf("客户端的端口号是:%uhn",ntohs(clientaddr.sin_port));

最后

以上就是踏实美女为你收集整理的获取对端IP,端口信息获取对端IP,端口信息的全部内容,希望文章能够帮你解决获取对端IP,端口信息获取对端IP,端口信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部