Я пытаюсь отправить простые строковые данные с моего сервера Python 3.x на мой Android-клиент.Когда я делал это на моем сервере Python 2.7, все было легко, но в Python 3.x я должен кодировать все данные, которые я отправляю.Когда я использую простую кодировку UTF-8, она отлично работала между сервером и клиентом python, но клиент Android по какой-то причине не смог обработать кодировку, и я не нашел соответствующих примеров или объяснений по этому поводу.
Часть моего кода сервера Python 3.x:
__port__ = 1234
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', __port__))
s.listen(1)
print('waiting for a new connection.')
conn, address = s.accept()
print('client accepted. client ip: ' + address[0])
conn.send(str('hello\r\n').encode(encoding='UTF-8'))
Часть кода моего Android-клиента:
socket = new Socket(InetAddress.getByName(tv_server_ip.getText().toString()), server_port);
DataInputStream in = new DataInputStream(socket.getInputStream()); //I use a DataInputStream for the readUTF() functioion
BufferedReader in_check = new BufferedReader(new InputStreamReader(socket.getInputStream())); //I use a BufferedReader to use the ready() function to check if there is data waiting to be read
while(socket.isConnected()) {
if (in_check.ready()){
String data = in.readUTF();
}
}
Проблема заключается в том, что когда я шифрую простое "Привет "сообщение в Python, он отлично работает:
>>> str('hello\r\n').encode(encoding='UTF-8')
b'hello\r\n'
и когда я отлаживал клиента, я увидел это:
in_check = {BufferedReader@4864}
cb = {char[8192]@4875}
0 = '\u0000' 0
1 = '\u0000' 0
2 = '\u0000' 0
3 = '\u0000' 0
4 = '\u0000' 0
5 = '\u0000' 0
6 = '\u0000' 0
7 = '\u0000' 0
8 = '\u0000' 0
9 = '\u0000' 0
10 = '\u0000' 0
11 = '\u0000' 0
Как я должен отправить данные с сервера Python наAndroid-клиент, чтобы он мог его прочитать?
- Мне нужно использовать сервер Python 3.x из-за других библиотек, которые я бы использовал в ближайшем будущем, поэтому, к сожалению, я больше не могу использовать Python 2.7.