在套接字编程中,我看到服务器绑定到一个地址 - 包括IP和端口号。然后步骤是监听,并接受(阻止呼叫)。我想知道为什么客户端不需要绑定其IP地址和端口号。实际上,它与服务器套接字地址绑定。然后,客户端调用connect()调用以建立连接。之后,客户端和服务器都可以互相通话。服务器如何与客户端通话?客户端未绑定其IP地址和端口号。服务器如何才能到达客户端?
答案 0 :(得分:5)
选择客户端端口号通常由内核完成。这是有道理的,因为只有内核知道当前正在使用哪些端口。但是,您可以自由specify the client port on your own,但我认为客户端程序很难确保端口是免费的。它可能只是“尝试错误”
通常,内核通过查询IP路由表来选择客户端IP地址。您可以使用route
命令显示和修改它们。
您已经询问过服务器如何知道客户端的IP地址。您需要了解TCP / IP才能回答您的问题。阅读wiki article。这应该是一个很好的起点。
答案 1 :(得分:5)
我想知道为什么客户端不需要绑定其IP地址和端口号。
因为有一个内部bind()作为connect()的一部分,如果套接字尚未绑定,并且因为服务器不关心客户端的端口号是什么:它不需要修复比如服务器的端口号。
实际上,它与服务器套接字地址绑定。
不,它不是:它连接到服务器的地址。
服务器如何与客户交谈?
通过已建立的连接。
客户端未绑定其IP地址和端口号。
是的,见上文。
服务器如何才能到达客户端?
客户端到达服务器的方式相同。通过发送带有目标地址和端口的数据包。
答案 2 :(得分:-1)
这是因为客户端总是必须连接到服务器。客户端可以称为slave,服务器始终是master。但是,只有在给定此类缓冲输入流的特定代码时,服务器才能与客户端通信。另外,即使有连接,也无法向客户端发送任何输入。端口号基本上是存储在服务器计算机中的程序的地址。因此,当客户端的程序必须联系服务器端时,它需要端口号,因此服务器端不需要客户端的端口号,因为客户端程序本身想要访问服务器程序。