发送JSON数组的长度通过套接字(从Java到Python)

2024-05-20 17:32:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用java连接python服务器(来自我的同事)。现在的目标是发送一个json数组。我们先发送长度。它与一个等效的python客户机一起工作,我正试图将其翻译成python。在

这是我的java代码的节选

  PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
   long length = (long) arraytosend.length();
   out.print(length);

   String arraytosend = new JSONArray(test2).toString(); 
   out.println(new JSONArray(test2).toString());

python服务器首先读取如下长度(我刚刚复制了相关命令de):

^{pr2}$

在“51”之后,它会立即失去连接。在

python客户机代码(我正试图将其翻译成java)的工作原理如下:

try:
        raw_data = json.dumps(dict(data=data))
    except:
        logger.warning('Failed to create a json representation of the data')
        return False

    # TODO: this could fail for *very* large objects
    raw_len = struct.pack('Q', len(raw_data))


    try:
        connection.sendall(raw_len)
        connection.sendall(raw_data)
    except Exception:
        logger.warning('lost connection while sending data')
        raise

Tags: 代码服务器jsonnewdata客户机rawlen
2条回答

您的接收器假设长度以8字节表示(N_bytes_MSG_LEN)。但是你把长的绳子送过来。PrintWriter.write(long)与PrintWriter.write(长期价值(长).toString)。例如,如果长度为356,则发送“356”。你应该先记下你的长度:“00000356”。在

我找到了解决方案,你必须考虑到java使用的。可以通过将服务器(python)代码更改为:

   raw_len = struct.pack('!Q', len(raw_data))

然后您可以发送:

^{pr2}$

相关问题 更多 >