我开始使用Twisted Framework,我写了一个TCP服务器并连接到它抛出Telnet,它工作正常。现在我想使用像PyUI或GTK这样的GUI来管理连接和连接的客户端(发送数据,切断连接等)。
这是我的代码
import sys
import os
from twisted.internet import reactor, protocol
from twisted.python import log
class Server(protocol.Protocol):
def dataReceived(self, data):
log.msg ("data received: %s"%data)
self.transport.write("you sent: %s"%data)
def connectionMade(self):
self.client_host = self.transport.getPeer().host
self.client_port = self.transport.getPeer().port
if len(self.factory.clients) >= self.factory.clients_max:
log.msg("Too many connections !!")
self.transport.write("Too many connections, sorry\n")
self.transport.loseConnection()
else:
self.factory.clients.append((self.client_host,self.client_port))
log.msg("connection from %s:%s\n"%(self.client_host,str(self.client_port)))
self.transport.write(
"Welcome %s:%s\n" %(self.client_host,str(self.client_port)))
def connectionLost(self, reason):
log.msg('Connection lost from %s:%s. Reason: %s\n' % (self.client_host,str(self.client_port),reason.getErrorMessage()))
if (self.client_host,self.client_port) in self.factory.clients:
self.factory.clients.remove((self.client_host,self.client_port))
class MyFactory(protocol.ServerFactory):
protocol = Server
def __init__(self, clients_max=10):
self.clients_max = clients_max
self.clients = []
def main():
"""This runs the protocol on port 8000"""
log.startLogging(sys.stdout)
reactor.listenTCP(8000,MyFactory)
reactor.run()
if __name__ == '__main__':
main()
感谢。
答案 0 :(得分:0)
如果要编写运行UI和网络的单个Python程序(进程),首先需要选择与UI工具包的事件循环集成的适当的Twisted reactor。请参阅here。
接下来,你可以从一些简单的事情开始,比如有一个按钮按下时会向所有当前连接的客户端发送短信。
另一件事:客户将连接什么?浏览器(也)?如果是这样,您可能会考虑使用WebSocket而不是原始TCP。