【发布时间】:2019-12-09 19:00:17
【问题描述】:
我在 respberrypi 3 上使用 python3 代码。 这是服务器上的代码:
import json, time, requests, signal, sys, socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
sock.bind((s.settings["udpIP"], s.settings["udpPort"]))
sessions = {}
c = 0
while True:
data, addr = sock.recvfrom(65535)
if somedata is x:
sequence = <clientSessionSeq> #startint at 000 and then 001 ( to monitor the udp packet so i wont lose any packets)
sock.sendto(sequence, (addr)) # returning the client the seq i got so it may proceed sending the next one, if its not the same seq client will resend lost package
s.print_info(
{
"REMOTE_ADDRESS": addr,
"STATUS": "PUBLISH",
},
)
c = 0
c = c + 1
客户端代码 -
data = data_iter()
while True:
# if seq is ok then pull next data
dataTmp = next(data)
sock.sendto(
"ID ".encode() + headers["SESSION_ID"].encode() + sequence + dataTmp,
(s.settings["server"]["ip"], s.settings["udpPort"]),
)
try:
sock.settimeout(3)
response, addr = sock.recvfrom(1024)
except IOError as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback)
s.print_info(e)
我的问题是在response, addr = sock.recvfrom(1024) 的客户端代码中,我有时会在 3 秒后超时,服务器向客户端发送它收到的 seq,但客户端 recvfrom 被卡住\延迟。
有没有办法在树莓派或套接字代码中对 udp 进行一些调整?
我不能使用tcp,我知道它会更好,我必须使用udp
如果我删除了recivefrom,它运行良好但我丢失了数据包,我将它用于流式录制,因此我必须进行完整录制。我只需要调整建议或其他使用 udp 而不是套接字的方法?
谢谢。
【问题讨论】:
标签: python sockets socket.io udp raspberry-pi3