【问题标题】:UDP socket connect, disconnect, and reconnectUDP 套接字连接、断开和重新连接
【发布时间】:2021-12-09 23:08:23
【问题描述】:

我正在做作业,我的教授说我需要在 UDP 上建立连接,我不明白为什么要这样做,因为我认为 UDP 不需要建立连接。

另外,当客户端从服务器接收到所有数据时,我需要断开连接。 然后我需要重新连接才能再次向服务器发送数据。

我正在使用python,我想知道我是否会编写这样的代码

客户端

client.close() //is it right to disconnect? 
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) // is it right to reconnect? 

我是否遵循教授期望的正确方向?

【问题讨论】:

  • socket 中的教授和命名都有点误导。 UDP 不需要像 TCP 那样的“连接”或“套接字”。一侧侦听 UDP 端口,另一侧向其发送数据报。 (可以有多个发送者和数据报。)有关您的代码的详细帮助,请将其完整展示给我们并提出具体问题!
  • @KlausD。 UDP 确实需要一个套接字。
  • 您的教授显然希望您在 UDP 套接字上发出 connect()。当你这样做时,你可以使用read()write()send()recv(),因为套接字知道远程IP地址和端口是什么。这不会创建网络连接:它只是调节本地 API。
  • 要断开 UDP 套接字,请使用空套接字地址再次调用 connect()

标签: python sockets network-programming udp connection


【解决方案1】:

你是对的,UDP 没有正常意义上的连接,所以很难知道你的教授到底在想什么。因此,最好的做法就是问他们。

但如果我不得不猜测,他们要么希望你:

  1. 在套接字上调用connect()
  2. 在应用程序级别建立某种“逻辑”连接。

在 UDP 套接字上调用 connect() 不会执行任何实际的 I/O,但它会告诉套接字目标是谁。这允许您使用 send() 而不是 sendto() 发送数据。

如果您的教授的意思是选项 (2),那么它可能只是在两个端点之间进行信息交换。因此,虽然在协议层没有连接,但两个端点相互通信,因此是连接的

【讨论】:

  • 我其实是在向教授询问了一些关于作业的描述后才得到这个问题的,我认为她的意思是选项(2)。谢谢你帮我理解!!!
猜你喜欢
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多