wxPython 线程化 UDP 服务器
我正在尝试搭建一个带有wxPython图形界面的UDP服务器。
这里有一段代码的链接:
我把它链接过来是因为内容比较长。我已经成功让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()