3

Twisted フレームワークを使用してサーバーを作成しようとしていて、データを複数回受信したい

class Echo(Protocol):
    def connectionMade(self):
        print " got connection from : " + str(self.transport.getPeer())

    def dataReceived(self, data):

        '''
        get the client ip
        '''
        if(len(data)>40):
            '''
            initial setup message from the client
            '''
            client_details = str(self.transport.getPeer())#stores the client IP as a string
            i = client_details.find('\'')#process the string to find the ip
            client_details = client_details[i+1:]
            j = client_details.find('\'')
            client_ip = client_details[:j]


            '''
            Extract the port information from the obtained text
            ''' 
            data = data.split('@')
            port1 = data[0]
            port2 = data[1]
            port3 = data[2]

       if int(data) == 1:
           method1(client_ip,port1)

       if int(data) == 2:
           method2(client_ip,port2)

私の質問: method1 と method2 は、クライアントから適切な整数データを含むメッセージを受信した場合にのみ呼び出されます。dataReceived() メソッド内でデータを受信するためにクライアントで待機できる方法はありますか、それとも dataReceived() メソッド自体で順番に行う必要がありますか?

4

1 に答える 1

3

このdataReceivedメソッドは、何らかのデータを受信したときに呼び出されます。さらにデータが受信されるのを待つには、から戻ってdataReceived再度呼び出すことができます。

また、TCP はメッセージ ベースではなく、ストリーム ベースです。あなたのdataReceivedメソッドは常に完全なメッセージを受け取ることを期待できないため、サンプル コードは正しくありません。 詳細については、Twisted Matrix Labs の Web サイトでよく寄せられる質問を参照してください。

于 2013-02-20T23:37:41.637 に答える