gpt4 book ai didi

c - 这个程序中 sockaddr_in 的目的是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:53 25 4
gpt4 key购买 nike

对于我的一门类(class),我必须对服务器和客户端进行编程,并且我们获得了一些示例代码以供使用。这是我感到困惑的片段:

main()
{
int sock, sock_current, cc, fromlen, tolen; /*sd is the socket */
int addrlen;
struct sockaddr_in sin;
struct sockaddr_in pin;

/* get an internet domain socket */
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}

/* complete the socket structure */
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(PORT);

/* bind the socket to the port number */
if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) == -1) {
perror("bind");
exit(1);
}

我认为 sockaddr_in struct sin 的目的是存储一个本地 IP 地址,以便在绑定(bind)时与 sock 关联。我对此是否正确?如果我是正确的,这段代码是如何实现的?我不明白:

/* complete the socket structure */
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(PORT);

最佳答案

bind 函数将本地协议(protocol)地址分配给套接字。这里sin的作用是告诉bind分配哪个本地地址。

memset(&sin, 0, sizeof(sin));     
sin.sin_family = AF_INET; //it's an IPv4 address
sin.sin_addr.s_addr = INADDR_ANY; //wildcard IP address
sin.sin_port = htons(PORT); //bind to this port number

关于c - 这个程序中 sockaddr_in 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971116/

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