2

将数据发送到服务器时出现一些错误。我对 Python 套接字非常陌生,这是一个简单的脚本。这里是

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 类来存储诸如 Client.room_id 或 Client.joinRoom(1) 之类的东西?

4

4 回答 4

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是您的客户端类,因此 createself.room_id等,以存储客户端状态和实现方法。

TCP 也是一种流协议,因此您需要在其之上实现消息协议以确保您拥有完整的消息。有关示例,请参见此答案。

于 2012-08-18T14:14:53.987 回答
0

尝试将打印功能更改为:

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

根据错误,其中一个变量是元组,因此应该将其转换为字符串。

于 2012-08-18T14:10:47.677 回答