gpt4 book ai didi

通过 sockaddr_in gethostname 等将主机转换为 ip

转载 作者:太空狗 更新时间:2023-10-29 14:49:49 26 4
gpt4 key购买 nike

我需要帮助将主机名转换为 ip 并插入到 sockaddr_in->sin_addr 以便能够分配给 char。例如我输入:localhost,它给了我 127.0.0.1

我找到了代码,但我不知道为什么它给我错误的数字

//---
#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);
}

我也写了自己的代码,但我不知道如何从 sockaddr 传输到 sockaddr_in 数据:

///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* 类型

我真的需要帮助,谢谢!

最佳答案

尝试这样的事情:

  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 */
}

这段代码是我凭内存写的,所以我不能保证它能正常工作,但我很确定它应该没问题。

关于通过 sockaddr_in gethostname 等将主机转换为 ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com