java - 通过套接字将 String 和 Byte[] 从 Android 应用程序发送到 Python 服务器

标签 java python android sockets networking

我正在从 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();

你能不能不要发送那么长的字节数组?或者我错过了一些关键的未知步骤?

最佳答案

不要多次读取套接字。重构代码,以便您首先从缓冲区中获取原始字节,然后以您喜欢的任何方式处理这些字节。

data = connection.recv(1024)
data = clean_data(data)
...

关于java - 通过套接字将 String 和 Byte[] 从 Android 应用程序发送到 Python 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149203/

相关文章:

android - 带参数改造post请求

java.lang 在 JNI 中调用 BluetoothAdapter.getDefaultAdapter() 时抛出 UNsatisfiedLinkError

python - 没有 NAN 值的标签编码

python - 如何在 Django 中拥有这样的 URL?

python - python文本框中文本和滚动条的自动滚动

Android 检查网络连接选项卡加载程序

android - 如何查找设备是否配置为可移植热点

java - 获取NoSuchMethodError : org. hamcrest.core.StringContains.containsStringIgnoringCase

java - 进度条不随线程更新

java - jlist 不会显示整行或太多