【发布时间】:2020-01-28 15:29:03
【问题描述】:
我正在从一个 android 应用程序中以字节数组的形式发送一个图像。我以前能够分部分发送数组,然后将这些部分放入 python 中的列表中,但这会产生一些错误,因为 python 会使用 b' 预先加载每个部分,而这些部分将保留为字符串的一部分。所以我现在正在尝试发送整个字节数组。在我发送数组之前,我发送了一个字符串,它给出了字节数组的大小,这样我就可以调用 call .recv 以获得正确的大小。
bytes_len = int(clean_len(str(connection.recv(1024))))
clean_len 只是取出 '\'' 和 'b'
然后我使用
data = connection.recv(int(bytes_len)
但它将数据输出为
Waiting on connection...
---------------------------------------------
Connection Accepted
Connection received from... ('192.168.1.89', 41568)
BYTES_LEN_RECV: 9640320
METADATA_RECV: m240,second_attempt,requalify,4,4,4
BYTE_ARRAY_RECV: b'' #THIS IS THE ISSUE
Sending Response
Closing Connection to ('192.168.1.89', 41568)
我正在从应用程序发送这样的字符串,紧随其后的是字节数组
printWriter.write(String.valueOf(bytes.length));
printWriter.flush();
printWriter.write(metadata);
printWriter.flush();
printWriter.close();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
bufferedOutputStream.write(bytes,0,bytes.length);
bufferedOutputStream.flush();
bufferedOutputStream.close();
socket.close();
你能不发送那么长的字节数组吗?还是我错过了一些关键的未知步骤?
【问题讨论】:
-
我会在任何处理完成之前检查原始数据,即在
clean_len之前。我还认为第一个recv正在读取缓冲区,所以当第二个recv被调用时,所有内容都已被读取,这会产生一个空数组。 -
哦,我假设每个 .recv 对应于应用程序中对 .flush 的每个调用。我对元数据和大小使用了两次调用,如下所示``` bytes_len = int(clean_len(str(connection.recv(1024)))) metadata = clean_len(str(connection.recv(1024))) ```
-
试试看,如果是这个问题,请告诉我。
标签: java python android sockets networking