Py学习  »  Python

带python的udp套接字

Samuel Brand • 5 年前 • 1593 次点击  

我试图使一个服务器能够接收和发送数据使用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
 
1593 次点击  
文章 [ 2 ]  |  最新文章 5 年前
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() 另一个。