2011-01-05 122 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