У меня есть сервер 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, чтобы она непрерывно отправляла эти «целые числа».
Спасибо, что прочитали вопрос и помогли.