Я новичок в сетевом программировании на питоне. Я использую сценарий, найденный в Интернете, который подключается к многоадресному адресу и получает пакеты MPEG-TS. Я вижу на wireshark, что после команды sock.setsockopt на мой компьютер поступают пакеты MPEG-TS.
Скрин с wireshark
https://imgur.com/XJDwd61
Но проблема возникает, когда я хочу напечатать результат sock.recv(). Я считаю, что это из-за состояния блокировки, если я правильно понимаю документацию. После раскомментирования setblocking(0) я получил ошибку 10035. Вы знаете, что мне нужно добавить, чтобы распечатать полученные данные в терминале? Заранее спасибо.
Я попытался изменить размер буфера в sock.recv(), чтобы он был меньше, равным и таким, как сейчас - выше 1358 байтов, что составляет количество байтов одной дейтаграммы.
import socket
import struct
import time
MCAST_GRP = '239.0.1.104'
MCAST_PORT = 12345
IS_ALL_GROUPS = True
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if IS_ALL_GROUPS:
# on this port, receives ALL multicast groups
sock.bind(('', MCAST_PORT))
else:
# on this port, listen ONLY to MCAST_GRP
sock.bind((MCAST_GRP, MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
#sock.setblocking(0)
print(f"Entering while loop")
while True:
time.sleep(1)
print(f"I'm in while loop")
print(sock.recv(4096))
recv()
в первую очередь? - person user207421   schedule 29.07.2019