Я пытаюсь отправить UDP-пакеты с изображениями моему другу, который находится за его NAT.Он переадресовал свой порт приема, но пакеты не приходят с использованием нашего кода Python.Но, тем не менее, при использовании тестового кода пакет действительно приходит, и кортеж, содержащий IPaddr и PORT, одинаков.
ПРИМЕЧАНИЕ: не сработало ни единого исключения, оно просто застревает в recvfrom
, потому что ничего нетчитать
Это пример кода, который я использовал, чтобы проверить, приходят ли пакеты и работает ли он:
import socket
IPADDR = '88.1.231.55'
PORTNUM = 8043
PACKETDATA = 'TEEEESSTT'.encode('ascii')
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.sendto(PACKETDATA, (IPADDR, PORTNUM))
s.close()
Инициализация класса UDP:
def __init__ (self, ip_dest, port_dest, port_src, tcp):
self.TCP = tcp
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.dest = (str(ip_dest), int(port_dest))
self.socket.bind(('', port_src))
self.receiveVideoThread = threading.Thread(target=self.receive_video)
self.receiveVideoThread.setDaemon(True)
self.receiveVideoThread.start()
...........
Отправьте изображение:
def send_video(self, frame):
if not self.TCP.pauseCall or not self.TCP.endCall:
try:
header = "{}#{}#{}#{}#".format(self.counter, time.time(), '640x480', self.fps).encode("utf-8")
ratio = self.get_compress_ratio(self.fps_friend)
frame = self.rescale_by_height(frame, 320)
self.frame_sent = frame
frame_compressed = self.compress(frame, 1)
self.socket.sendto(header + frame_compressed, self.dest)
self.counter += 1
except Exception as e:
print(e)
return
и получите:
def receive_video(self):
while not self.TCP.endCall or not self.TCP.pauseCall:
try:
data, _ = self.socket.recvfrom(200)
datagram = data.split(b'#', 4)
self.fps_friend = datagram[3]
........
Когда мы используем наш код, пакеты появляются на Wireshark, но никогда не приходят.При использовании примера кода пакет действительно приходит.
Может ли это быть что-то, связанное с размером пакетов?Я попытался сжать изображения максимально, так что теперь размер всего пакета UDP составляет ~ 5 КБ