Написал простой обмен сообщениями, по факту все работает, только не могу понять одного, почему тот, кто первый отравляет сообщение, не привязывает адрес методом
udp_socket.bind(addr)
? Ну в принципе, это понятно: потому что в противном случае он бы подумал, что нужно прослушивать этот порт не на своем интерфейсе и выдал бы ошибку. Но как тогда он потом принимает сообщения методом
data = udp_socket.recvfrom(1024)
, если сокет не привязан к его адресу?
Первый отправитель:
import socket
import sys
host = '192.168.1.37'
port = 7770
addr = (host,port)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
data = input("Отправьте сообщение: ")
data = str.encode(data)
udp_socket.sendto(data, addr)
data = udp_socket.recvfrom(1024)
print("Вам письмо: ", data[0].decode())
udp_socket.close()
Первый получатель:
#Модуль socket для сетевого программирования
import socket
import struct
#данные сервера
host = '192.168.1.37'
port = 7770
addr = (host,port)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#bind - связывает адрес и порт с сокетом
udp_socket.bind(addr)
#Бесконечный цикл работы программы
while True:
#recvfrom - получает UDP сообщения
conn, addr = udp_socket.recvfrom(1024)
res = conn.decode()
print("Вам сообщение: " ,conn)
reply = input("Что ответите? ")
reply = str.encode(reply)
#sendto - передача сообщения UDP
udp_socket.sendto(reply, addr)
udp_socket.close()