所以,我正在尝试用C学习套接字编程(我在C中是一个菜鸟),但是我们如何设置基于字符串的主机名。例如:
memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */
echoServAddr.sin_family = AF_INET; /* Internet address family */
echoServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */
//echoServAddr.sin_addr.s_addr = servIP;
echoServAddr.sin_port = htons(echoServPort); /* Server port */
在这里:
echoServAddr.sin_addr.s_addr = inet_addr(servIP);
servIP必须是127.0.0.1的形式,但我想使用像localhost这样的字符串?
答案 0 :(得分:2)
您必须使用getaddrinfo
功能。它的使用方式如下:
getaddrinfo(machine, port, &addrinfo, &addrinfo_result)
例如:
struct addrinfo hints; //This "helps" to search
struct addrinfo *result;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM; //Your socket's type
/* There are some more like protocol, flags.. */
error = getaddrinfo(argv[1], argv[2], &hints, &result);
答案 1 :(得分:2)
除了getaddrinfo
之外,您还需要查看gethostbyname
和gethostbyaddr
。
gethostbyname
,特别是做你想做的事。它要求解析器库获取一个字符串并执行正向查找以将其解析为一个数字:
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);