社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

带python的udp套接字

Samuel Brand • 6 年前 • 1690 次点击  

我试图使一个服务器能够接收和发送数据使用udp,我已经审查了一些代码,但他们发送或接收数据,但不是两个,我试图通过一个端口发送数据,并接受另一个,但我不能。

我是否想过像在tcp中那样使用accept()函数,udp中是否有类似的方法或更好的解决方案?谢谢你

while True:                                                 
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  sock.sendto(MESSAGE, (UDP_IP, UDP_PORT1))
  data, addr = sock.recvfrom(1024)
  print data
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41079
文章 [ 2 ]  |  最新文章 6 年前
Mark Tolonen
Reply   •   1 楼
Mark Tolonen    6 年前

如果您是udp侦听器,则 bind 插座的端口。如果您是发件人,则不需要绑定端口:

回音服务器

from socket import *

s = socket(type=SOCK_DGRAM)
s.bind(('localhost',5000))

while True:
    data,addr = s.recvfrom(1024)
    print(data,addr)
    s.sendto(data,addr)

客户机

from socket import *

s = socket(type=SOCK_DGRAM)
s.sendto(b'hello',('localhost',5000))
data,addr = s.recvfrom(1024)
print(data,addr)

启动服务器,然后运行客户端。

客户端输出:

C:\>client.py
b'hello' ('127.0.0.1', 5000)

C:\>client.py
b'hello' ('127.0.0.1', 5000)

服务器输出:

C:\>server.py
b'hello' ('127.0.0.1', 50391)
b'hello' ('127.0.0.1', 50392)
Jeremy Friesner
Reply   •   2 楼
Jeremy Friesner    6 年前

accept() 是一个仅限TCP的函数,它在UDP网络中没有应用程序,所以除非您尝试使用TCP,否则不要使用它。

至于从一个端口发送数据而从另一个端口接收数据,简单的方法是创建两个udp套接字。你可以打电话 recvfrom() 在其中一个上面 sendto() 另一个。