繁体   English   中英

Python异步UDP服务器

[英]Python asyncore UDP server

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

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

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

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

我尝试使用扭曲的,但我不知道如何编写发送方部分,该部分可以绑定到与侦听相同的端口。 最后结果是端口被阻塞。

有什么方法可以将异步套接字与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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM