gpt4 book ai didi

Python异步UDP服务器

转载 作者:行者123 更新时间:2023-12-01 05:14:48 24 4
gpt4 key购买 nike

我正在用 Python 编写服务器应用程序,用于监听请求、处理请求并发送响应。

所有请求/响应都从相同的地址和端口发送到服务器应用程序。我需要同时接收/发送消息,并且服务器需要从/向相同的端口和地址接收/发送消息。我找到了一些异步套接字的教程,但只有 TCP 连接的示例。

不幸的是,我需要 UDP。当我在 create 方法中将 SOCK_STREAM 更改为 SOCK_DGRAM 时,出现错误。

return getattr(self._sock,name)(*args)
socket.error: [Errno 95] Operation not supported

我尝试使用twisted,但我不知道如何编写发送方部分,它可以绑定(bind)到与其监听相同的端口。最后结果是端口被阻塞。

有什么方法可以使用UDP异步套接字或如何使用twisted从同一端口发送?一些例子将受到高度赞赏。

最佳答案

您几乎只需编写代码的发送和接收部分,它们就会一起工作。请注意,您可以在单个监听 UDP 套接字上发送和接收 - 您不需要每个套接字都发送和接收(特别是如果您想在同一地址上发送和接收)。

from __future__ import print_function

from sys import stdout

from twisted.python.log import startLogging
from twisted.internet import reactor
from twisted.internet.protocol import DatagramProtocol

class SomeUDP(DatagramProtocol):
def datagramReceived(self, datagram, address):
print(u"Got a datagram of {} bytes.".format(len(datagram)))

def sendFoo(self, foo, ip, port):
self.transport.write(
(u"Foo datagram: {}".format(foo)).encode("utf-8"),
(ip, port))

class SomeSender(object):
def __init__(self, proto):
self.proto = proto

def start(self):
reactor.callLater(3, self._send)

def _send(self):
self.proto.sendFoo(u"Hello or whatever", b"127.0.0.1", 12345)
self.start()

startLogging(stdout)

proto = SomeUDP()
reactor.listenUDP(12345, proto)

SomeSender(proto).start()

reactor.run()

关于Python异步UDP服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com