如何将字节转换为字符串,然后将相同的字符串转换回字节

时间:2017-04-30 08:33:27

标签: python string sockets byte data-conversion

我有一个有两个方面的软件:客户端和服务器。 该软件中的客户端可以通过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"

这与我在服务器端获得的字节不同。

有关如何发送/接收这些消息而没有任何错误的任何建议?

顺便说一句,我试图手动连接到服务器端的软件(通过在本地创建一个套接字并向他发送第一个命令)然后我得到了响应,所以我可以认为问题在于将字节转换为字符串反之亦然。

1 个答案:

答案 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