wxPython 线程化 UDP 服务器

0 投票
1 回答
769 浏览
提问于 2025-04-16 01:32

我正在尝试搭建一个带有wxPython图形界面的UDP服务器。

这里有一段代码的链接:

UDP服务器代码 pastie.org

我把它链接过来是因为内容比较长。我已经成功让UDP服务器在一个线程中运行,但我不知道如何在停止线程时关闭这个socket。

现在每次点击开始时,它都会启动一个新的线程,但我会把这个功能去掉。请问在停止线程时,有没有办法关闭正在运行的socket?

如果我这样做完全错误,任何建议都非常感谢。

谢谢

Eef

1 个回答

2

使用Python的Twisted库。它和wxPython有集成,利用twisted.internet.wxreactor可以让网络编程变得简单,而且不需要使用多线程。

from twisted.internet import wxreactor
from twisted.internet.protocol import DatagramProtocol

wxreactor.install()

class MyProtocol(DatagramProtocol):
    def datagramReceived(self, data, (host, port)):
        print "received %r from %s:%d" % (data, host, port)
        self.transport.write(data, (host, port))

# <GUI code>
# to start listening do port = reactor.listenUDP(<port>, MyProtocol())
# to stop do self.transport.stopListening() in MyProtocol
# or port.stopListening() from outside

from twisted.internet import reactor
reactor.registerWxApp(app)
reactor.run()

撰写回答