直接使用udp传输整个图片

这两个程序在本地局域网运行良好,但是一旦使用frp通过公网传输就会导致数据包丢失后一部分,或者说只有每张图片的前一部分数据能够传输成功

server.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2
import socket
import numpy as np
import time

capture = cv2.VideoCapture(0)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
addr = ('127.0.0.1', 8088)

while True:
t = time.time()
ret, img = capture.read()
params = [cv2.IMWRITE_JPEG_QUALITY, 0]
data = cv2.imencode(".jpg", img, params)[1]
data = np.array(data).tobytes()
print(data)
sock.sendto(data, addr)
print(time.time() - t)

client.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2
import socket
import numpy as np
import time

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 8088))

while True:
data, addr = sock.recvfrom(65535)
img = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
cv2.imshow('img', img)
cv2.waitKey(1)
print(len(img))

将图片分片传输