Мне удалось сделать это с помощью автономного сценария и протестировать его, подключившись два ноутбука, использующие кабель Ethernet и использующие программное обеспечение Hercules на другом ноутбуке для отправки/получения данных.
Однако, пытаясь сделать это в приложении с графическим интерфейсом на базе PyQt6, я получаю следующее ошибка:
Код: Выделить всё
line 33, in __init__
self.sock.connect((self.sendToAddress, self.sendToPort))
socket.gaierror: [Errno 11001] getaddrinfo failed
Код: Выделить всё
def __init__(self, addr, port):
self.sock = socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM) # UDP
self.data = None
self.sendToAddress = str(addr)
self.sendToPort = int(port)
self.reply_data = None
self.replyBufSize = 1024
self.sock.bind(('169.234.29.200', 8000))
self.sock.connect((self.sendToAddress, self.sendToPort)) # error caused by this line
def sendData(self):
if(isinstance(self.data, bytes) == False):
self.data = self.data.encode()
bytes_Sent = self.sock.sendto(self.data, (self.sendToAddress, self.sendToPort))
print("sent data = ", self.data)
print("bytesSent = ", bytes_Sent)
def getData(self):
while self.reply_data is None:
print("waiting for msg")
self.reply_data = self.sock.recvfrom(self.replyBufSize)
print("still waiting")
print(self.reply_data)`
Я тщательно искал это в Интернете, и почти все решения включают в себя отсутствующий оператор socket.connect(). Однако в моем случае, похоже, причиной этого является метод socket.connect().
Я также пробовал очистить DNS и перезагрузить компьютер. >
ОБНОВЛЕНИЕ:
Я принимал sendToAddress и sendToPort в качестве входных данных от пользователя, сохраняя их в файл, который действует как общая память, и считывает их, когда необходимо создать сокет.
Однако, если я жестко запрограммирую значения, все будет работать без проблем.
Может ли быть какая-то конкретная причина, по которой прием значений в качестве входных данных приводит к ошибке?
p>
Я использовал print(socketObj.getsockname()), чтобы убедиться, что объект сокета создан правильно. Ошибка по-прежнему возникает при вызове метода Connect().
Подробнее здесь: https://stackoverflow.com/questions/751 ... ocket-conn