我正在工作 UDP 应用程序,我不确定我是否做得对。我需要将地址输入addr.sin_addr.s_addr
.到目前为止,我只是使用了addr.sin_addr.s_addr = htonl(INADDR_ANY)
但是我需要从用户那里设置特定的地址。当我使用addr.sin_addr.s_addr = htonl(adresa)
时,我做得对吗?
完整代码:
int main(int argv, char **argc)
{
strcpy(adresa, "someadress");
int optval;
struct sockaddr_in addr;//, incoming_addr;
/* create socket */
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock < 0)
{
err("socket()");
}
/* set reusable flag */
optval = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
/* prepare inet address */
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
if(strcmp(adresa, "-") == 0)
{
addr.sin_addr.s_addr = htonl(INADDR_ANY); /* listen on all interfaces */
}
else
{
addr.sin_addr.s_addr = htonl(adresa); /* listen on all interfaces */
}
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
{
err("bind");
}
for(;;)
{
}
return 0;
}
最简单的方法是使用inet_addr
函数,它可以获取IPv4地址并将其转换为网络字节顺序的地址作为in_addr_t
。 然后可以将此值存储在sin_addr.s_addr
中:
addr.sin_addr.s_addr = inet_addr(adresa);