提问人:preno1221 提问时间:2/8/2023 更新时间:2/8/2023 访问量:40
从 android 客户端发送到 python 服务器时,最后一个字节会丢失
Last bytes are lost when sending from android client to python server
问:
所以一切正常,除非我有非 ascii 的东西发送到 python 服务器(这是我的假设)。
基本上我发送了一个 json String,其中一部分是: ."Nova Nazaré - State of Mato Grosso, 78638-000, Brazil"
正如你所看到的,有一个字符,它不是标准的 ascii 字符。
所以正如我所说,我发送了 Json 字符串,并且由于 的存在,Json 字符串的最后一个 bracked 没有发送,数据已损坏。例如,如果我使用超过 1 个非 ASCII 字符,例如希伯来语,也会发生同样的事情。从字符串末尾丢失更多字节。'é'
'é'
}
我想问我该如何解决这个问题......由于我使用的是 utf-8,而不是 ascii。所以我认为它应该有效。
这是我的 android 客户端的发送函数(它是我创建的 SocketTask 类的一部分):
private void send(String sendingStr)
{
try
{
OutputStreamWriter writer = new
OutputStreamWriter(this.socket.getOutputStream(),
StandardCharsets.UTF_8); // outputStreamWriter creating
writer.write(sendingStr);
writer.flush();
Log.d("Result", "sent");
}
catch (Exception e)
{
Log.e("Exception", e.toString());
}
}
以下是我接收数据的方式:
while True:
client_socket, client_address_port = server_socket.accept()
print(f"{client_address_port} connected.")
length_to_read = client_socket.recv(HEADER_LENGTH).decode('utf-8')
activity_name = client_socket.recv(int(length_to_read)).decode('utf-8')
print("Got: " + length_to_read + activity_name)
if activity_name:
length_to_read = client_socket.recv(HEADER_LENGTH).decode('utf-8')
data_string = client_socket.recv(int(length_to_read)).decode('utf-8')
print("Got: " + length_to_read + data_string)
基本上,已经在 python 端的打印中,我看到存在服务器或其他东西未读取最后一个字节的错误。
还有想法?
答: 暂无答案
评论