当前位置:  技术问答>linux和unix

inet_ntoa 怎么用不对呢?

    来源: 互联网  发布时间:2017-05-09

    本文导语:  参考网上的例子,但是inet_ntoa用不起来,求大家指点。         printf("received a connection from %sn", inet_ntoa(*(struct in_addr *) & remote_addr.sin_addr.s_addr));//这一句老是出错 #include  #include  #include  #include  #include  #i...

参考网上的例子,但是inet_ntoa用不起来,求大家指点。

        printf("received a connection from %sn", inet_ntoa(*(struct in_addr *) & remote_addr.sin_addr.s_addr));//这一句老是出错


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SERVPORT 3339    /*服务器监听端口号 */
#define BACKLOG 10       /* 最大同时连接请求数 */

main()
{
    int sock_fd,client_fd;    /*sock_fd:监听socket;client_fd:数据传输socket */
    int sin_size;
    struct sockaddr_in my_addr;   /* 本机地址信息 */
    struct sockaddr_in remote_addr;     /* 客户端地址信息 */
    if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket创建出错");
        exit(1);
    }

//clear port ?
int on = 1;
    int ret = setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &on,  sizeof (on) ); //如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用
 //closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
    my_addr.sin_family=AF_INET;
//htonl():把32位值从主机字节序转换成网络字节序,
    //htons():把16位值从主机字节序转换成网络字节序,
    //用的时候应该改成前面的函数
    my_addr.sin_port=htons(SERVPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);
//将socket与本机一个端口关联
    if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
        perror("bind出错");
        exit(1);
    }
//listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,
    //将到达的服务请求保存在此队列中,直到程序处理它们。
    if(listen(sock_fd, BACKLOG) == -1) 
{
        perror("listen出错");
        exit(1);
    }

    while(1) 
{
        sin_size = sizeof(struct sockaddr_in);
//accept()函数让服务器接收客户的连接请求,产生一个新的用于数据传输socket
        if((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
            perror("accept error");
            continue;
        }
printf("received a connection from n");
//inet_ntoa将网络二进制的数字转换成网络地址
        printf("received a connection from %sn", inet_ntoa(*(struct in_addr *) & remote_addr.sin_addr.s_addr));
//这段代码写的太猛,这是一个用子进程处理事件的过程,子进程只做了受到消息向客户端返回一个确认
        //创建一个进程之后第一件事情是要判断这个进程是哪个进程,是子进程还是父进程
        if(!fork()) {    /* //子进程代码段,返回0为子进程,下面处理的就是子进程. */
            if(send(client_fd, "Hello, you are connected!n", 26, 0) == -1) {
                perror("sendu51fau9519uff01");
            }
            close(client_fd);
            exit(0);
        }
        close(client_fd);
    }
}




#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SERVPORT 3339
#define MAXDATASIZE 100    /*u6bcfu6b21u6700u5927u6570u636eu4f20u8f93u91cf */

main(int argc, char *argv[])
{
    int sock_fd, recvbytes;
    char buf[MAXDATASIZE];
    struct hostent *host;
    struct sockaddr_in serv_addr;
    printf("------eee222--------n");
/*
    if(argch_addr);
    bzero(&(serv_addr.sin_zero),8);
    printf("connect n");
    if(connect(sock_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) {
        perror("connectu51fau9519uff01");
        exit(1);
    }
    printf("recv n");
    if((recvbytes=recv(sock_fd, buf, MAXDATASIZE, 0)) == -1) {
        perror("recvu51fau9519uff01");
        exit(1);
    }
printf("recvbytes is %dn",recvbytes);
    buf[recvbytes] = '';
    printf("Received: %s n",buf);
    close(sock_fd);

return 0;
}



|
自己对照下

#include 

#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#include 
#define SERVPORT 3339    /*服务器监听端口号 */
#define BACKLOG 10       /* 最大同时连接请求数 */

main()
{
    int sock_fd,client_fd;    /*sock_fd:监听socket;client_fd:数据传输socket */
    //int sin_size;
    struct sockaddr_in my_addr;   /* 本机地址信息 */
    struct sockaddr_in remote_addr;     /* 客户端地址信息 */
    if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        perror("socket创建出错");
        exit(1);
    }

    //clear port ?
    int on = 1;
    int ret = setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &on,  sizeof (on) ); //如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用
    //closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
    my_addr.sin_family=AF_INET;
    //htonl():把32位值从主机字节序转换成网络字节序,
    //htons():把16位值从主机字节序转换成网络字节序,
    //用的时候应该改成前面的函数
    my_addr.sin_port=htons(SERVPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);
    //将socket与本机一个端口关联
    if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
    {
        perror("bind出错");
        exit(1);
    }
    //listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,
    //将到达的服务请求保存在此队列中,直到程序处理它们。
    if(listen(sock_fd, BACKLOG) == -1)
    {
        perror("listen出错");
        exit(1);
    }

    while(1)
    {
        socklen_t sin_size = sizeof(struct sockaddr_in);
        //accept()函数让服务器接收客户的连接请求,产生一个新的用于数据传输socket
        if((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
        {
            perror("accept error");
            continue;
        }
        printf("received a connection from n");
        //inet_ntoa将网络二进制的数字转换成网络地址
        printf("received a connection from %sn", inet_ntoa(*(struct in_addr *) & remote_addr.sin_addr.s_addr));
        //这段代码写的太猛,这是一个用子进程处理事件的过程,子进程只做了受到消息向客户端返回一个确认
        //创建一个进程之后第一件事情是要判断这个进程是哪个进程,是子进程还是父进程
        if(!fork())      /* //子进程代码段,返回0为子进程,下面处理的就是子进程. */
        {
            if(send(client_fd, "Hello, you are connected!n", 26, 0) == -1)
            {
                perror("sendu51fau9519uff01");
            }
            close(client_fd);
            exit(0);
        }
        close(client_fd);
    }
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 内核中inet_ntoa包含在哪个文件头中的。。。。。在线等
  • 求助 请问vxworks支持inet_ntoa函数吗? 需要包含哪些头文件? 谢谢
  • 一个关于inet_ntoa函数在printf中的奇怪现象(不知算不算linux的bug:-)
  • C++问题,在windows下可以用inet_ntoa(cliaddr.sin_addr);得到IP地址,在linux下怎么办?
  • 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
  • socket inet_ntoa返回客户端地址字符串的问题!
  • 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享
  • 一个关于inet_ntoa函数在printf中的奇怪现象(不知算不算linux的bug:-) iis7站长之家
  • linux inet_ntoa()函数返回值问题
  • 关于socket编程中inet_ntoa的怪异问题
  • IP处理函数inet_aton()和inet_ntoa()使用说明


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,