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