Как непрерывно получать данные в клиенте Android с сервера Python? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть сервер Python, который отправляет клиенту список натуральных чисел. С примерами из Интернета я могу отправить некоторые данные с сервера на клиент и с клиента на сервер ОДИН РАЗ. Я хочу, чтобы мой сервер продолжал отправлять значения, а мой клиент Android продолжал получать значения, пока сокет не будет закрыт. Я не уверен, где добавить цикл.

Я прикрепил код AsyncTask ниже. Я не уверен, где должен быть цикл while в AsyncTask.

И я также уверен, что программа сервера правильная.

Код AsyncTask:

public class Client extends AsyncTask<Void, Void, String> {

String dstAddress;
int dstPort;
String response = "";
TextView textResponse;

Client(String addr, int port, TextView textResponse) {
    dstAddress = addr;
    dstPort = port;
    this.textResponse = textResponse;
}

@Override
protected String doInBackground(Void... arg0) {

    Socket socket = null;

    try {
        socket = new Socket(dstAddress, dstPort);

        while (true) {
            InputStream inputStream = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            response = reader.readLine();
            return response;
        }


    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        response = "UnknownHostException: " + e.toString();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        response = "IOException: " + e.toString();
    /*} finally {
        if (socket != null) {
            try {
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }*/   //I commented here to check if it would work without closing the socket. But it doesn't.
    }
    return null;
}

@Override
protected void onPostExecute(String result) {
    textResponse.setText(response);
    Log.i("TAG",response);
    super.onPostExecute(result);
}

}

И код сервера:

import socket
import sys
from thread import *

HOST = ''   
PORT = 8888 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'


try:
    s.bind((HOST, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + 
msg[1]
sys.exit()

print 'Socket bind complete'


s.listen(10)
print 'Socket now listening'

def clientthread(conn):
conn.send('Welcome to the server. Type something and hit enter\n') 
    i = 0
while True:

    reply = str(i).encode()

    conn.sendall(reply)
            i += 1

conn.close()

while 1:
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
start_new_thread(clientthread ,(conn,))

s.close()

Краткое резюме.

1) Какие изменения необходимо внести в AsyncTask для непрерывного получения данных с сервера. Где должен быть цикл while?

2) Какие изменения следует внести в программу сервера python, чтобы она непрерывно отправляла эти «целые числа».

Спасибо, что прочитали вопрос и помогли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...