Networking POSIX套接字绑定()练习
我正在尝试解决以下介绍性POSIX套接字练习: 编写一个TCP echo客户端实现“使用bind(),以便系统同时选择地址和端口” (我假设“系统”指的是操作系统。)Networking POSIX套接字绑定()练习,networking,posix,Networking,Posix,我正在尝试解决以下介绍性POSIX套接字练习: 编写一个TCP echo客户端实现“使用bind(),以便系统同时选择地址和端口” (我假设“系统”指的是操作系统。) 我不明白当connect()以上述方式执行绑定时,为什么必须调用bind()(如果我不正确,请纠正我)。另外,提供给bind()调用的套接字地址需要哪些sin6_addr和sin6_port值才能完成此行为?如果您是正确的,则不需要使用bind调用。如果不进行绑定,系统将在连接时选择源地址和源端口 这是一个练习。它只是测试您是否知
我不明白当connect()以上述方式执行绑定时,为什么必须调用bind()(如果我不正确,请纠正我)。另外,提供给bind()调用的套接字地址需要哪些sin6_addr和sin6_port值才能完成此行为?如果您是正确的,则不需要使用
bind
调用。如果不进行绑定,系统将在连接时选择源地址和源端口
这是一个练习。它只是测试您是否知道如何以这种方式使用
bind
。编辑:这与所要求的相反。对不起,我以为问题是关于用户选择IP地址和端口。感谢EJP指出这一点
应该是你要找的 这应该是最有趣的部分:
clnt_addr.sin_family = AF_INET;
clnt_addr.sin_addr.s_addr = INADDR_ANY;
clnt_addr.sin_port = htons(33333);
if (bind(sockfd, (struct sockaddr *) &clnt_addr,
sizeof(clnt_addr)) < 0)
error("ERROR on binding");
使套接字也绑定到特定的IP地址。这里重要的是,在connect()之前绑定套接字将TCP/IP通信的端点设置为使用所需的IP地址/端口。如果没有bind(),您的套接字将是无限的:内核将为您选择源IP地址,并将随机源端口分配给您的套接字
我不明白为什么在connect()时需要bind()调用
以上述方式执行绑定(如果需要,请更正我)
不正确)
你说得对
此外,sin6_addr和sin6_port的哪些值是必需的
对于提供给bind()调用以完成此操作的套接字地址
行为
不支持IPv4的任何应用程序。我将把IPv6留给读者作为练习
您还应该指定零作为端口号,然后系统将选择。
bind
获取打开的端口,connect
尝试连接到目标listen
端口。它们是分开的,以便端口重用。这并没有达到系统选择端口的目的。哦,对不起,我完全误解了这个问题。我认为用户必须同时选择绑定地址和端口。嗯,那可能是因为这是一个有趣的案例。。。
clnt_addr.sin_addr.s_addr = inet_addr("192.168.0.1");