我需要帮助主机名转换为IP和插入到sockaddr_in->sin_addr能够分配给字符.例如,i input: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* 类型
我真的需要帮助,谢谢!
2条答案
按热度按时间o2gm4chl1#
试试这样的方法:
我直接从我的记忆中写了这段代码,所以我不能保证它能工作,但我很确定它应该没问题。
hts6caw32#
这段C代码我相信你想要的:
我得到的输出是这样的:
希望这对你有帮助。