OSError: [Errno 22] неверный аргумент - PullRequest
0 голосов
/ 09 июля 2019

У меня есть приложение, которое использует сокет UDP.Каждое приложение может отправлять и получать дату.
В приложении, которое получает данные, код указан ниже:
Приложение получателя:

UDPSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
bufferSize= 1024
EnginePort=2000


def ReceiveSocket():
    global UDPSocket
    global AddressPort
    global bufferSize
    AddressPort   = ("127.0.0.2", EnginePort)
    # Bind to address and ip
    UDPSocket.bind(AddressPort)
    print("UDP server up and listening")
    bytesAddressPair = UDPSocket.recvfrom(bufferSize)
    message = pickle.loads(bytesAddressPair[0])
    address = bytesAddressPair[1]
    clientMsg = "Message from Client:{}".format(message)
    clientIP  = "Client IP Address:{}".format(address)
    print(clientMsg)
    print(clientIP)


while True:
    ReceiveSocket()

отправка простого сообщения:

import socket
import pickle
UDP_IP = "127.0.0.2"
UDP_PORT = 2000
MESSAGE = "Hello, World!"

print ("UDP target IP:", UDP_IP)
print ("UDP target port:", UDP_PORT)
print ("message:", MESSAGE)
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
sock.sendto(pickle.dumps(MESSAGE), (UDP_IP, UDP_PORT))

При получении данных выдайте мне эту ошибку:
Выход получателя:

Message from Client:Hello, World!
Client IP Address:('127.0.0.2', 2003)
Traceback (most recent call last):
  File "/home/pi/RoomServerTestApps/Engine.py", line 88, in <module>
    ReceiveSocket()
  File "/home/pi/RoomServerTestApps/Engine.py", line 29, in ReceiveSocket
    UDPSocket.bind(AddressPort)
OSError: [Errno 22] Invalid argument

Но когда ReceiveSocket() находится за пределами while true(), приложение работает хорошо.
Пожалуйста, помогите мне оэто.
Спасибо.

1 Ответ

0 голосов
/ 09 июля 2019

Получите bind () из цикла. Вы уже привязаны к порту при первом запуске, поэтому второй + запуск завершается неудачно.

AddressPort   = ("127.0.0.2", EnginePort)
UDPSocket.bind(AddressPort)
def ReceiveSocket():
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...