如何拆分、发送和合并 UDP?
How can I split, send and combine UDP?
我想使用以下代码进行 udp 通信。
此代码为示例,实际代码中的msg变量超过10000字节
UDPSend.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
ADDRESS = "127.0.0.1"
s = socket(AF_INET, SOCK_DGRAM)
# s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
count = 0
while True:
msg = 'print("udp_start")\n'
msg += 'value='+str(count)+'\n'
msg += 'if value == 100:\n'
msg += ' print("value is 100")\n\n'
s.sendto(msg.encode(), (ADDRESS, PORT))
count = count + 1
s.close()
UDPRecieve.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
while True:
msg, address = s.recvfrom(8192)
exec(msg.decode('utf-8'))
s.close()
https://qiita.com/akakou/items/e9fbcfc0c69cc957152e
我要发送代码并执行。
另外,由于msg变量太长,可能会出问题,所以我想将msg变量拆分成1000到5000字节发送。
我该怎么做?
您不能简单地拆分、传输和连接 UDP 中的数据,因为在 UDP 中,数据包在传输过程中可能会丢失、复制和重新排序。虽然您可能会尝试在 UDP 之上添加一些(复杂的)可靠性层,但问题是为什么首先使用 UDP 而不是 TCP。我建议您重新考虑 UDP 或您使用 UDP 的当前设计是否真的是解决您未知问题的正确选择,即更多地关注问题而不是您对解决方案的特定想法。另见 XY problem。
我想使用以下代码进行 udp 通信。
此代码为示例,实际代码中的msg变量超过10000字节
UDPSend.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
ADDRESS = "127.0.0.1"
s = socket(AF_INET, SOCK_DGRAM)
# s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
count = 0
while True:
msg = 'print("udp_start")\n'
msg += 'value='+str(count)+'\n'
msg += 'if value == 100:\n'
msg += ' print("value is 100")\n\n'
s.sendto(msg.encode(), (ADDRESS, PORT))
count = count + 1
s.close()
UDPRecieve.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
while True:
msg, address = s.recvfrom(8192)
exec(msg.decode('utf-8'))
s.close()
https://qiita.com/akakou/items/e9fbcfc0c69cc957152e
我要发送代码并执行。
另外,由于msg变量太长,可能会出问题,所以我想将msg变量拆分成1000到5000字节发送。
我该怎么做?
您不能简单地拆分、传输和连接 UDP 中的数据,因为在 UDP 中,数据包在传输过程中可能会丢失、复制和重新排序。虽然您可能会尝试在 UDP 之上添加一些(复杂的)可靠性层,但问题是为什么首先使用 UDP 而不是 TCP。我建议您重新考虑 UDP 或您使用 UDP 的当前设计是否真的是解决您未知问题的正确选择,即更多地关注问题而不是您对解决方案的特定想法。另见 XY problem。