我在发送到服务器的数据时遇到一些错误。我是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)等内容?
答案 0 :(得分:0)
尝试将打印功能更改为:
print(str(self.client_address) + ' : ' + str(self.data))
根据错误,其中一个变量是元组,因此应将其转换为字符串。
答案 1 :(得分:0)
问题在于追溯:
print(self.client_address + ' : ' + self.data)
self.client_address是一个元组。你想要(在这种情况下)self.client_address [0] 要么是这样,要么在不同的行上打印出来
答案 2 :(得分:0)
self.client_address
是元组,您应该使用self.client_address[0]
代替this。
答案 3 :(得分:0)
self.client_address
是一个元组,而不是一个字符串!所以你需要打印它的str()。
SEER
是您的客户端类,因此创建self.room_id
等来存储客户端状态和实现方法。
TCP也是一种流媒体协议,因此您需要在其上实施消息协议,以确保您拥有完整的消息。有关示例,请参阅this answer。