如何在Python中从套接字读取原始字节?

普尼索尼

我有一个Android Java应用程序通过套接字发送字节,该套接字连接到在Python中运行服务器的主机。我需要接收这些字节,因为它们是从python套接字发送的。我看到在Python中,“ socket.recv”仅返回一个字符串。当我从Java应用程序发送ASCII字符串时,我能够在python服务器中正确接收数据,但是当我使用java字节发送二进制数据时,我看到接收到的数据并不相同。我需要在Python中接收原始字节,才能使协议正常工作。请指出正确的方向。

在套接字上发送数据的代码段:

private void sendFrameMessage(byte[] data) {
        byte[] lengthInfo = new byte[4];
        Log.v(TAG, "sendFrameMessage");

        for(int i=0; i<data.length; i++) {
            Log.v(TAG, String.format("data[%d] = %d", i, data[i]));
        }

        try {
            lengthInfo[0] = (byte) data.length;
            lengthInfo[1] = (byte) (data.length >> 8);
            lengthInfo[2] = (byte) (data.length >> 16);
            lengthInfo[3] = (byte) (data.length >> 24);
            DataOutputStream dos;
            dos = new DataOutputStream(mSocket.getOutputStream());
            dos.write(lengthInfo, 0, 4);
            dos.write(data, 0, data.length);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

接收方的Python代码

def recvFrameMessage(self, s):
        recv_count = 4;
        data = s.recv(recv_count)
        if data == 0:
            return None
        total_rx = len(data)
        lenInfo = data
        while total_rx < recv_count:
            data = s.recv(recv_count - total_rx)
            if data == 0:
                return None
            total_rx += len(data)
            lenInfo = lenInfo + data

        recv_count = self.decodeFrameLen(lenInfo)
        logger.info("length = %d" % recv_count)

        data = s.recv(recv_count)
        total_rx = len(data)
        msg = data
        while total_rx < recv_count:
            data = s.recv(recv_count - total_rx)
            if data == 0:
                return None            
            total_rx += len(data)
            msg = msg + data
        logger.info("msg = " + msg)
        for i in range(0, len(msg)-1):
            logger.info("msg[%d] = %s" % (i, msg[i]))
        return msg
蒂姆·彼得斯

@SteveP对于“具有某种结构”的二进制数据很有用,但是如果这是字节流,则在Python 2中只需将ord()函数应用于从套接字获取的每个“字符”。例如,如果Java端发送了一个NUL字节,它将在Python端显示为字符"\x00",然后:

>>> ord("\x00")
0

要转换整个字符串s

map(ord, s)

返回相应的8位无符号整数的列表。

我在这里假设使用Python 2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Python中的套接字读取字节数组

来自分类Dev

如何从Python中的套接字读取字节数组

来自分类Dev

如何在Python中recv之前找出套接字中有多少字节?

来自分类Dev

如何通过python中的套接字发送字节?

来自分类Dev

如何在python中读取9兆字节的文件?

来自分类Dev

如何在Python中读取应用程序/八位字节流

来自分类Dev

如何从Java中的字节流读取(PHP / Java套接字通信)

来自分类Dev

如何从Java中的字节流读取(PHP / Java套接字通信)

来自分类Dev

UDP-无法在python中从套接字读取字节吗?

来自分类Dev

PHP:如何从套接字读取N个字节?

来自分类Dev

Python:套接字未读取字节输入

来自分类Dev

套接字InputStream出现故障,同时读取块中的字节

来自分类Dev

如何在Python中从GLib.GString获取原始字节?

来自分类Dev

如何从Android中的套接字读取数据

来自分类Dev

如何在套接字中获取最新的Recv通知(Python)

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何在Python中修改或扩展标准套接字类?

来自分类Dev

如何在Python套接字中传递变量?

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何在Python中处理套接字“连接被拒绝”异常?

来自分类Dev

如何在Python套接字中获取域名?

来自分类Dev

Python中的QDISC_BYPASS(原始套接字)

来自分类Dev

Python中的QDISC_BYPASS(原始套接字)

来自分类Dev

如何在python中从用户读取字节

来自分类Dev

如何在服务器套接字JAVA中读取所有Inputstream

来自分类Dev

如何在Swift中通过TCP套接字读取字符串

来自分类Dev

如何在 boost::asio 中仅读取 udp 套接字的一部分?

来自分类Dev

如何在Ruby中绑定套接字?

来自分类Dev

如何在C ++中读取超过4096字节的输入

Related 相关文章

  1. 1

    如何从Python中的套接字读取字节数组

  2. 2

    如何从Python中的套接字读取字节数组

  3. 3

    如何在Python中recv之前找出套接字中有多少字节?

  4. 4

    如何通过python中的套接字发送字节?

  5. 5

    如何在python中读取9兆字节的文件?

  6. 6

    如何在Python中读取应用程序/八位字节流

  7. 7

    如何从Java中的字节流读取(PHP / Java套接字通信)

  8. 8

    如何从Java中的字节流读取(PHP / Java套接字通信)

  9. 9

    UDP-无法在python中从套接字读取字节吗?

  10. 10

    PHP:如何从套接字读取N个字节?

  11. 11

    Python:套接字未读取字节输入

  12. 12

    套接字InputStream出现故障,同时读取块中的字节

  13. 13

    如何在Python中从GLib.GString获取原始字节?

  14. 14

    如何从Android中的套接字读取数据

  15. 15

    如何在套接字中获取最新的Recv通知(Python)

  16. 16

    如何在Python中完成套接字文件传输?

  17. 17

    如何在Python中修改或扩展标准套接字类?

  18. 18

    如何在Python套接字中传递变量?

  19. 19

    如何在Python中完成套接字文件传输?

  20. 20

    如何在Python中处理套接字“连接被拒绝”异常?

  21. 21

    如何在Python套接字中获取域名?

  22. 22

    Python中的QDISC_BYPASS(原始套接字)

  23. 23

    Python中的QDISC_BYPASS(原始套接字)

  24. 24

    如何在python中从用户读取字节

  25. 25

    如何在服务器套接字JAVA中读取所有Inputstream

  26. 26

    如何在Swift中通过TCP套接字读取字符串

  27. 27

    如何在 boost::asio 中仅读取 udp 套接字的一部分?

  28. 28

    如何在Ruby中绑定套接字?

  29. 29

    如何在C ++中读取超过4096字节的输入

热门标签

归档