[英]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.