Я пытаюсь создать UDP-сервер Python, используя следующий код.
import socket
if __name__ == '__main__':
bind_ip = "0.0.0.0"
bind_port = 30335
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP, Server setting
server.bind((bind_ip, bind_port))
print("[*] Listening on %s:%d " % (bind_ip, bind_port))
while True:
client, addr = server.accept()
print('Connected by ', addr)
while True:
data = client.recv(1024)
print("Client recv data : %s " % (data))
client.send("ACK!")
И я получил ошибку ниже
Traceback (most recent call last):
File C:\ProgramData\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\jimmy\desktop\github\worldlongcompany\python\main.py:20
client, addr = server.accept()
File C:\ProgramData\anaconda3\Lib\socket.py:294 in accept
fd, addr = self._accept()
OSError: [WinError 10045] The attempted operation is not supported for the type of object referenced
Что-то не так с моим кодом? Я новичок в Python, и, пожалуйста, дайте мне знать, как я могу это исправить.
Моя версия Python:
> ! python --version
Python 3.11.8
@KenzoStaelens: Для сокетов UDP нет listen, как и accept.
ой, как-то это пропустил, моя вина






server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP, Server setting
...
client, addr = server.accept()
accept — операция для TCP-сокетов. Однако вы создаете сокет UDP (SOCK_DGRAM). В UDP нет установления соединения, предшествующего обмену данными, т. е. нет connect и accept. Вместо этого данные обмениваются напрямую в сокете с помощью send и recv.
Я новичок в Python...
Это не имеет отношения к Python. То же самое происходит и с сокетами в других языках программирования.
Как правильно использовать сокет UDP?
@JimmyHu: Как я уже сказал: используйте send и recv непосредственно в сокете, нет accept и т. д. Я почти уверен, что в Интернете есть миллионы примеров для этого, и что их легко найти.
может ты забыл прослушать розетку документация