2011-01-05 88 views
10

我想写一个服务器,可以接受多个客户端在Python(扭曲)。我已经非常熟悉使用标准python套接字模块的套接字编程,但是这里出现了问题.. 我认为twisted很难进入,我已经阅读了一些关于它的教程。 但我真的找不到一个简单的套接字服务器接受多个连接..任何人都可以帮忙吗?如果我在网上错过了一些有价值的信息,请让我知道,因为我拉我的头发..多个客户端的扭曲服务器

任何帮助是非常赞赏,

Andesay

+0

你看http://stackoverflow.com/questions/1365737/managing-multiple-twisted客户端连接 – 2011-01-05 13:41:36

+0

安德鲁,我认为这个问题与Andesay提出的问题不同。我觉得Andesay的问题在很基础的层面上。如果我错了,请纠正我。 – 2011-01-05 13:44:21

回答

12

说,你要在服务器上运行的端口9000接受客户端连接:

from twisted.internet import reactor, protocol 

PORT = 9000 

class MyServer(protocol.Protocol): 
    pass 

class MyServerFactory(protocol.Factory): 
    protocol = MyServer 

factory = MyServerFactory() 
reactor.listenTCP(PORT, factory) 
reactor.run() 

如果你想测试连接到该服务器,下面是客户端的代码(在不同的终端推出):

from twisted.internet import reactor, protocol 

HOST = 'localhost' 
PORT = 9000 

class MyClient(protocol.Protocol): 
    def connectionMade(self): 
     print "connected!" 

class MyClientFactory(protocol.ClientFactory): 
    protocol = MyClient 

factory = MyClientFactory() 
reactor.connectTCP(HOST, PORT, factory) 

reactor.run() 

你会注意到代码非常相似,只有我们使用Factory作为服务器,ClientFactory使用客户机,并且服务器需要侦听(listenTCP),而客户端需要连接(connectTCP)。祝你好运!

+0

我会说,在一个终端的服务器代码,并打开多个新的终端,并尝试使用'nc localhost 9000'或'telnet localhost 9000'进行连接。首先使用标准客户端有帮助 – 2011-01-05 14:30:10

+0

感谢这个真棒的例子..我认为这正是我需要..我有一个问题,虽然..在“类MyServer(protocol.Protocol)”服务器的例子中,你写一个通过声明..为什么没有这个班? – Andesay 2011-01-05 14:45:00

+0

我将如何去发送和接收数据? – Andesay 2011-01-05 14:51:20

0

Twisted是一个真棒框架,但这个(经常)意味着,对于一件容易的事情,可能是一个很困难......

这是事实。你需要写一个类实现了一个Resource,如果你需要一个LineReceiver,然后将其与连接到反应器:

reactor.connectTCP(<HOST>, <PORT>, istance_of_your_class) 
+1

经过反思,这个答案根本没有任何意义。您已将'resource'链接到'ClientFactory',并且我没有看到'connectTCP'如何与* all *处的提问者问题相关联。 “接受多个客户端”听起来像提问者正在编写*服务器*而不是客户端。资源只与HTTP有关,一个'LineReceiver'与什么有关,你在说什么类有一个实例? – Glyph 2011-01-05 15:28:42