Пытаюсь настроить непрерывный обмен пакетами между клиентом и сервером.
Сервер работает на Twisted Python.
Есть работающий клиент на Python. Принцип такой: клиент подсоединяется к серверу (отправляет пустое сообщение ""), в ответ от сервера приходит json-массив вида [идентификационный номер игрока]. После этого клиент отправляет простой json-массив ["start"], после чего от сервера приходит json-массив, содержащий начальные данные клиента [Xнач., Yнач. ...].
Начал писать клиент на Java под Андроид, но почему-то после отправки пустого сообщения и получения первого json-массива с идентификационным номером игрока, на следущее отправленное на сервер json-сообщение ["start"] не получаю ответа (null). Использую AsyncTask для создания непрерывного обмена пакетами без разрыва соединения (я так понимаю, что для работы серверной фабрики Twisted, необходимо удерживать соединение). В чём может быть причина (вопрос только относительно работы клиента: почему аналогичный клиент на Python продолжает обмениваться пакетами с сервером, а клиент на Java получает ответ только на первую пустую строку)?
Клиент на Python (работает):
import socket
import os
import json
data = []
data.append('start')
def connection():
serv_addr = ('IP', ...)
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.connect(serv_addr)
print('Connection is established')
tcp_socket.send('')
data_to_recv = tcp_socket.recv(1024)
print('1 - Client: ' + '')
print('1 - Server: ' + data_to_recv)
while True:
tcp_socket.send(json.dumps(data))
data_to_recv = tcp_socket.recv(1024)
if data_to_recv != '':
print('2 - Client: '+ json.dumps(data))
print('2 - Server: '+ data_to_recv)
tcp_socket.close()
def client():
connection()
client()
Клиент на Java - Аналог клиента на Python (но почему-то получает ответ от сервера только на первое пустое сообщение):
class ProgressTask extends AsyncTask<String, Object, Void> {
OutputStream os;
OutputStreamWriter osw;
BufferedWriter bw;
InputStream is;
InputStreamReader isr;
BufferedReader br;
String message;
String sendMessage;
JSONArray json = new JSONArray();
Socket socket =null;
@Override
protected void onPreExecute() {
json.put("start");
Log.e("TCP Client", "C: Connecting...");
return;
}
@Override
protected Void doInBackground(String... params) {
Socket socket = null;
try {
socket = new Socket("IP", ...);
os = socket.getOutputStream();
osw = new OutputStreamWriter(os);
bw = new BufferedWriter(osw);
sendMessage="\n";
//если здесь поставить просто пустые кавычки, как для клиента на Python, то от сервера ответ с идентификационным номером
//игрока уже не приходит
bw.write(sendMessage);
bw.flush();
System.out.println("Message_1 sent to the server: " + sendMessage);
//Get the return message from the server
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
message = br.readLine();
//bw.close();
//br.close();
System.out.println("Message_1 received from the server: " + message);
publishProgress(message);
int k = 1;
while (k>0) {
os = socket.getOutputStream();
osw = new OutputStreamWriter(os);
bw = new BufferedWriter(osw);
sendMessage=json.toString();
bw.write(sendMessage);
bw.flush();
System.out.println("Message_2 sent to the server: " + sendMessage);
//Get the return message from the server
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
message = br.readLine();
//bw.close();
//br.close();
System.out.println("Message_2 received from the server: " + message);
if (message != null) {
publishProgress(message);
}
}//конец while
} catch (IOException e) {
System.out.println("Ошибка: ");
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Object... items) {
editText.setText(items[0].toString());
}
@Override
protected void onPostExecute(Void unused) {
Toast.makeText(getActivity(), "Задача завершена", Toast.LENGTH_SHORT).show();
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости