如何在Android客户端中从python服务器连续接收数据?

时间:2019-06-05 09:30:20

标签: android python websocket socket.io android-asynctask

我有一个python服务器,它向客户端发送自然数列表。通过Internet上的示例,我能够将一些数据从服务器发送到客户端,以及从客户端发送到服务器一次。我希望我的服务器继续发送值,而我的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服务器程序进行什么更改,以便它连续发送这些“整数”。

感谢您阅读问题并提供帮助。

0 个答案:

没有答案