我有一个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服务器程序进行什么更改,以便它连续发送这些“整数”。
感谢您阅读问题并提供帮助。