首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在套接字编程中,为什么客户端不绑定到地址?

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

Stack Overflow用户
提问于 2014-02-08 20:29:06
回答 3查看 10.2K关注 0票数 13

在套接字编程中,我看到服务器绑定到一个地址--由IP和端口号组成。然后步骤是listen和accept (阻塞调用)。我想知道为什么客户端不需要绑定它的ip地址和端口号。实际上,它与服务器套接字地址绑定。然后,客户端调用connect()调用来建立连接。稍后,客户端和服务器都可以相互通信。服务器如何与客户端通信?客户端尚未绑定其IP地址和端口号。服务器如何能够到达客户端?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-08 20:35:06

选择客户端端口号通常由内核完成。这是有意义的,因为只有内核知道当前正在使用哪些端口。但是,您可以自由地使用specify the client port on your own,但我认为客户端程序很难确保端口是空闲的。它可以只是“尝试一个错误”

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

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

票数 9
EN

Stack Overflow用户

发布于 2014-02-09 05:52:17

我想知道为什么客户端不需要绑定它的ip地址和端口号。

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

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

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

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

通过已建立的连接。

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

是的,看上面的。

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

与客户端访问服务器的方式相同。通过发送具有目标地址和端口的分组。

票数 12
EN

Stack Overflow用户

发布于 2014-02-08 21:02:38

这是因为客户端总是要连接到服务器。客户端可以调用为备机,服务器始终是主机。否则,即使有连接,它也不能向客户端发送任何输入。端口号基本上是存储在服务器计算机中的程序的地址。因此,当客户端程序需要与服务器端联系时,它需要端口号,所以服务器端不需要客户端的端口号,因为客户端程序本身想要访问服务器程序。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21645970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档