通过SOCKADDR_IN的gethostname等转换主机的ip [英] converting host to ip by sockaddr_in gethostname etc

查看:181
本文介绍了通过SOCKADDR_IN的gethostname等转换主机的ip的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助的主机名转换为IP和插入到sockaddr_in-> sin_addr要能分配为char。
比如我输入:本地主机,这让我127.0.0.1

i need help converting hostname to ip and inserting to sockaddr_in->sin_addr to be able assign to char. For example i input: localhost and it gives me 127.0.0.1

我发现code,但我不知道为什么它给了我错号

I found code, but i dont know why it gives me wrong numbers

//---
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include <sys/fcntl.h>
#include <netdb.h>
//---

///CZY WPISANO HOST

        struct in_addr inaddr;
        inaddr.s_addr = inet_addr(argv[1]);
        if( inaddr.s_addr == INADDR_NONE) //if sHost is name and not IP
        {
            struct hostent* phostent = gethostbyname( argv[1]);
            if( phostent == 0)
                bail("gethostbyname()");

            if( sizeof(inaddr) != phostent->h_length)
                bail("problem z inaddr"); // error something wrong,

            puts(argv[1]);
            inaddr.s_addr = *((unsigned long*) phostent->h_addr);

            //strdup( inet_ntoa(inaddr));
            srvr_addr = inet_ntoa(adr_srvr.sin_addr);
            puts(srvr_addr);
        }

我也写了自己的code,但我不知道从sockaddr的转移如何有sockaddr_in数据:

I also wrote own code but i dont know how transfer from sockaddr to sockaddr_in data:

///CZY WPISANO HOST
    if(argv[1][0]>=(char)'a' && argv[1][0]<=(char)'Z')
    {
        struct hostent *hent;
        hent = gethostbyname(argv[1]);
        adr_srvr.sin_addr =  (struct in_addr*)hent->h_addr_list;

    }

adr_srvr是char *类型

adr_srvr is a char* type

我真的需要帮助,谢谢!

I really need help, thanks!

推荐答案

尝试是这样的:

  struct hostent        *he;
  struct sockaddr_in  server;
  int                 socket;

  const char hostname[] = "localhost";

  /* resolve hostname */
  if ( (he = gethostbyname(hostname) ) == NULL ) {
      exit(1); /* error */
  }

  /* copy the network address to sockaddr_in structure */
  memcpy(&server.sin_addr, he->h_addr_list[0], he->h_length);
  server.sin_family = AF_INET;
  server.sin_port = htons(1337);

  /* and now  you can connect */
  if ( connect(socket, (struct sockaddr *)&server, sizeof(server) ) {
      exit(1); /* error */
  }

我写这篇code直接从我的记忆,所以我不能保证它的工作原理,但我pretty确定它应该没问题。

I wrote this code straight from my memory so I cannot guarantee that it works but I am pretty sure it should be OK.

这篇关于通过SOCKADDR_IN的gethostname等转换主机的ip的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆