не может прочитать данные, отправленные с сервера Python 3.x на Android-клиент через сокет - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь отправить простые строковые данные с моего сервера 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...