Я пытаюсь создать простое приложение, которое передает файлы по протоколу UDP. Следует сохранять список файлов и отправлять каждый файл, когда кто-нибудь об этом попросит. Я реализовал два порта 1 - для связи и сообщения 2 - для передачи файлов. Наиболее важной частью является то, что приложение является сервером и клиентом одновременно, например, программа отправляет файл другому пользователю и получает файл одновременно. Когда я отправляю свои данные, я не могу получить в другом приложении, но когда я отслеживаю свой порт, я вижу, что данные отправляются:
21:58:13.195105 IP 127.0.0.1.47756 > 127.0.0.1.3001: UDP, length 49
0x0000: 4500 004d d923 4000 4011 637a 7f00 0001 E..M.#@.@.cz....
0x0010: 7f00 0001 ba8c 0bb9 0039 fe4c 7032 705f .........9.Lp2p_
0x0020: 7365 7276 6572 2c73 6561 7263 685f 666f server,search_fo
0x0030: 722c 612e 7478 742c 616c 692d 4c61 7469 r,a.txt,a-Lati
0x0040: 7475 6465 2d45 3734 3430 3837 35 tude-E7440875
, но клиент не может получить. И когда я запустил другой файл для получить Я получаю эту ошибку: BlockingIOError: [Errno 11] Ресурс временно недоступен
моя реализация клиента и сервера:
import socket
def bind_socket_server(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
except AttributeError:
pass # Some systems don't support SO_REUSEPORT
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, 20)
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)
sock.bind(('', port))
sock.setblocking(0)
# Set some more multicast options
intf = socket.gethostbyname(socket.gethostname())
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(intf))
return sock
def bind_socket_client():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 20)
return sock