У меня есть два приложения Python: клиентская сторона и еще одна серверная.
клиентская сторона:
import socket
import threading
UDP_IP = '127.0.0.1'
UDP_PORT = 56780
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
nickname = input("Enter Nickname: ")
def write():
while True:
print("hello")
message = f"{nickname} -> {input()}"
client_socket.sendto(message.encode(), (UDP_IP, UDP_PORT))
def receive():
while True:
try:
message, _ = client_socket.recvfrom(1024)
print(message.decode())
except Exception as e:
print(e)
break
write_thread = threading.Thread(target=write)
write_thread.start()
receive_thread = threading.Thread(target=receive)
receive_thread.start()
серверная часть:
import socket
HOST = '127.0.0.1'
PORT = 56780
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((HOST, PORT))
clients = set()
def broadcast(message):
for client in clients:
server_socket.sendto(message, client)
def receive():
print("UDP Chat Server is running...")
while True:
try:
message, client_address = server_socket.recvfrom(1024)
if client_address not in clients:
clients.add(client_address)
print(f"Connected With {str(client_address)}")
broadcast(message)
except:
clients.remove(client_address)
receive()
Ошибка, с которой я столкнулся, возникает из-за клиентского приложения, а именно из-за:
def receive():
while True:
try:
message, _ = client_socket.recvfrom(1024)
print(message.decode())
except Exception as e:
print(e)
break
Ошибка:
[WinError 10022] Был указан недопустимый аргумент
Эта ошибка возникает только в моей системе Windows. На моем Mac код работает именно так, как должен.
Я пробовал разные порты, чтобы проверить, работает ли какой-либо из них, но это не помогло.
Один из недостатков заключался в том, что я получал ошибку при попытке привязать эту часть кода к своему серверу, но не мог понять, почему и как ее исправить.
message, _ = client_socket.recvfrom(1024)
Подробнее здесь: https://stackoverflow.com/questions/790 ... y-udp-clie