在套接字编程中,为什么客户端没有绑定到地址?

dex*_*ous 10 sockets linux network-programming

在套接字编程中,我看到服务器绑定到一个地址 - 包括IP和端口号.然后步骤是监听,并接受(阻止呼叫).我想知道为什么客户端不需要绑定其IP地址和端口号.实际上,它与服务器套接字地址绑定.然后,客户端调用connect()调用以建立连接.之后,客户端和服务器都可以互相通话.服务器如何与客户端通话?客户端未绑定其IP地址和端口号.服务器如何才能到达客户端?

use*_*421 6

我想知道为什么客户端不需要绑定其IP地址和端口号.

因为有一个内部bind()作为connect()的一部分,如果套接字尚未绑定,并且因为服务器不关心客户端的端口号是什么:它不需要像服务器那样修复端口号.

实际上,它与服务器套接字地址绑定.

不,它没有:它连接到服务器的地址.

服务器如何与客户端通话?

通过已建立的连接.

客户端未绑定其IP地址和端口号.

是的,见上文.

服务器如何才能到达客户端?

客户端到达服务器的方式相同.通过发送带有目标地址和端口的数据包.


hek*_*mgl 5

选择客户端端口号通常由内核完成.这是有道理的,因为只有内核知道当前正在使用哪些端口.但是,您可以自己指定客户端端口,但我认为客户端程序很难确保端口是免费的.它可能只是"尝试错误"

选择客户端IP地址通常也是由内核通过查询IP路由表来完成的.您可以使用该route命令显示和修改它们.


您已经询问了服务器如何知道客户端的IP地址.您需要了解TCP/IP才能回答您的问题.阅读维基文章.这应该是一个很好的起点.