У меня есть приложение, которое использует сокет 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()
, приложение работает хорошо.
Пожалуйста, помогите мне оэто.
Спасибо.