2

サーバーにデータを送信するとエラーが発生します。私はPythonSocketsを初めて使用しますが、これは単純なスクリプトです。ここにあります

Exception happened during processing of request from ('ip', 53863)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 638, in __init__
    self.handle()
  File "serv.pyz", line 9, in handle
    print(self.client_address + ' : ' + self.data)
TypeError: can only concatenate tuple (not "str") to tuple

Serv.pyz(私は知っています、それは.pyでなければなりません)

import SocketServer


class SEER(SocketServer.BaseRequestHandler):

def handle(self):
    while 1:
        self.data = self.request.recv(9000)
        print(self.client_address + ' : ' + self.data)
server = SocketServer.TCPServer(('', 4857), SEER)
server.serve_forever()

また、Client.room_idやClient.joinRoom(1)などを格納するClientクラスを追加するにはどうすればよいですか?

4

4 に答える 4

0

印刷機能を次のように変更してみてください。

    print(str(self.client_address) + ' : ' + str(self.data))

エラーによると、変数の1つはタプルであるため、これはそれを文字列に変換する必要があります。

于 2012-08-18T14:10:47.677 に答える
0

問題は、トレースバックによって与えられるとおりです。

print(self.client_address + ' : ' + self.data)

self.client_addressはタプルです。あなたは(この場合)self.client_address [0]が欲しいですそれか、それらを別々の行に印刷してください

于 2012-08-18T14:12:04.037 に答える
0

self.client_addressタプルです。self.client_address[0]代わりにこのように使用する必要があります。

于 2012-08-18T14:14:00.963 に答える
0

self.client_address文字列ではなくタプルです!したがって、str()を出力する必要があります。

SEERはクライアントクラスなので、作成self.room_idなどしてクライアントの状態を保存し、メソッドを実装します。

TCPはストリーミングプロトコルでもあるため、完全なメッセージがあることを確認するには、TCPの上にメッセージプロトコルを実装する必要があります。例については、この回答を参照してください。

于 2012-08-18T14:14:53.987 に答える