我有一个有两个方面的软件:客户端和服务器。 该软件中的客户端可以通过IP和端口连接到服务器,然后客户端向服务器发送命令,服务器响应。
我要做的是在客户端和服务器端代理中创建代理,因为我希望客户端和服务器之间的所有消息都通过我构建的一些IM。 所以我将客户端连接到我的IM监听的本地端口.. andi在服务器端做了同样的事情。
因此,我的IM在客户端从该软件获得的第一条消息是
b"DRPC\x02\x00\x00\x009V\xfe'\x07\x84GO\x83d\xee\x11\x8f\xb0\x8a\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00D\x00E\x00S\x00K\x00T\x00O\x00P\x00-\x00H\x00M\x00V\x005\x00U\x00R\x00U\x00\\\x00C\x00C\x00E\x00\x00\x00\x10\xce\xff\x0b\xd4\x01\x00\x00\x00\x00\x00\x00\xfd\x7f\x00\x00\x10\xce\xff\x0b\xd4\x01\x00\x00\xfc\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00~\xd1\xe8\xb6\xd1]\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\xcd\xa1\x12\xfd\x7f\x00\x00\xe0F\xfd\x99\xf7\x7f\x00\x00"
我假设是一个字节。 要发送它我转换它(我的IM发送和接收字符串,所以我必须将其转换)到字符串使用 str(somethin)
在服务器端,我得到这个字符串然后我必须以字节格式将它发送到服务器的软件。 但是当我发送它时,由于错误,我没有得到任何回复, 我尝试了以下事项:
1)按原样发送此字符串 - 我得到的错误是它需要一个字节而不是字符串。
2)尝试删除前缀 b“和后缀”,然后使用。将该字符串转换为字节。
bytes(str,'utf-8)
但此命令的输出是
b"DRPC\\x02\\x00\\x00\\x009V\\xfe'\\x07\\x84GO\\x83d\\xee\\x11\\x8f\\xb0\\x8a\\xc8\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00D\\x00E\\x00S\\x00K\\x00T\\x00O\\x00P\\x00-\\x00H\\x00M\\x00V\\x005\\x00U\\x00R\\x00U\\x00\\\\\\x00C\\x00C\\x00E\\x00\\x00\\x00\\xd0\\xcf\\xff\\x0b\\xd4\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\xfd\\x7f\\x00\\x00\\xd0\\xcf\\xff\\x0b\\xd4\\x01\\x00\\x004\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xd4\\x01\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00~\\xd1\\xe8\\xb6\\xd1]\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00`\\xcd\\xa1\\x12\\xfd\\x7f\\x00\\x00\\xe0F\\xfd\\x99\\xf7\\x7f\\x00\\x00"
这与我在服务器端获得的字节不同。
有关如何发送/接收这些消息而没有任何错误的任何建议?
顺便说一句,我试图手动连接到服务器端的软件(通过在本地创建一个套接字并向他发送第一个命令)然后我得到了响应,所以我可以认为问题在于将字节转换为字符串反之亦然。
答案 0 :(得分:0)
在发送和接收之前尝试对字符串进行编码和解码。
例如:
发送
userMessage = "String"
s.send(userMessage.encode('utf-8'))
userMessage被编码为字节,然后发送到服务器。
接收
data = conn.recv(bufferSize)
if not data: break
messageRecv = data.decode('utf-8')
服务器接收数据,然后通过解码数据消息创建字符串messageRecv。两者都使用utf-8。
如果它是一个较大的项目,如列表;你需要使用pickle.dumps / pickle.loads