做什么连接插座()内部操作?

2024-05-13 23:50:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着理解一般的网络,特别是在这个时候的套接字。我正在使用Python套接字库来处理一些事情。在

我在因特网上遇到了许多示例,它们通过简单的ECHO服务器演示TCP和UDP套接字。在

对于TCP对应方,参考资料建议tcpeecho客户机使用

socket_object.connect() to connect to the server and exchange data over it. Similarly, the TCP echo server uses listen() and accept() to handle connections and interactions with the client.

问题

  1. 现在这些资源提到它是一个TCP连接,因此 面向连接(我从概念上理解)。请帮忙 我明白说连接导向实际上是什么意思 实施方面?以及如何连接() accept()API有助于实现这一点?在
  2. 类似地,对于UDP对等体,resources表示 客户端不使用UDP()也不连接任何UDP() echo服务器使用任何listen()或accept()。这有助于实现 无连接行为。请帮我弄清楚到底是怎么回事?或者 也许以上问题1的答案能帮助我理解这一点 也。

  3. 另外,在我们的例子中,UDP echo客户端为什么不需要呢 绑定到套接字。甚至可以把数据发送到遥控器 服务器,它是否仍然不需要一个套接字端点来实际发送 当服务器发回数据时,是否还接收数据?或者本质上,我想,了解bind()在内部的真正作用将有助于我理解这一点。


Tags: andtheto数据echo网络服务器客户端
2条回答

也许我错了,但据我所知,connect()只需检查IP和端口是否正确,另一方的应用程序是否就绪。listen()和bind()向操作系统发送有关端口的信息-“如果某个包将到达端口xxx,请将其发送给我”。accept()向第一个应用程序发送信息,说明一切正常,我们可以互相交谈。 这种方法(而不是accept)只是通知OS接受或拒绝来自另一个应用程序的包。接受通知另一个应用程序一切正常,我们可以开始发言或不发言

Please help me understand what does it actually mean to say connection oriented implementation wise?

这意味着TCP协议依赖于一个开放的连接来工作。换句话说,必须是一个开放的连接,通过这个连接,通过socket发送的消息包可以通过这个连接进行发送。在

And how does the connect(), listen() and accept() APIs help achieve this?

我从未使用过这个Python套接字库,但我认为我对套接字的基本知识足以解释这一点。connect方法用于打开我在前面的回答中提到的这个非常相同的连接。服务器使用另外两种方法来接收通过这个打开的连接从客户端发送的消息。在

Similarly, for the UDP counterparts, the resources suggest that the UDP echo client does not use any connect() and nor does the UDP echo server use any listen() or accept(). This helps it achieve connectionless behavior. Please help me understand how exactly ?

您可能知道UDP协议与TCP协议不同,它不依赖于开放连接来工作。这意味着消息包被“原子”地发送(彼此独立),这将使前面的方法变得无用。正如您在问题中链接的文档所述:

由于没有连接,服务器本身不需要监听和接受连接。它只需要使用bind()将其套接字与端口相关联,然后等待单个消息。

这意味着使用UDP进行套接字通信的服务器所要做的就是注册一个端口,该端口将从客户端发送并通过recvfrom方法接收套接字消息。客户机也使用此方法从服务器接收消息。在

Even to be able to send data to a remote server, will it still not need a socket endpoint to actually send the data and also receive data when the server sends it back ?

API可能没有公开一个方法来做这个客户端,因为客户机动态地选择端口并阻止其他程序成为该端口中的服务器,或者至少他们应该这样做。在

相关问题 更多 >