#1 Не получается установить непрерывное соединение клиент-сервер (Java-Twisted) - Android

321
13 мая 2017, 18:54

Пытаюсь настроить непрерывный обмен пакетами между клиентом и сервером.

Сервер работает на 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();
}
}
READ ALSO
Подключение библиотеки jsoup к intellij idea

Подключение библиотеки jsoup к intellij idea

Не получается подключить библиотеку jsoupПоиск в интернете особо не помог, проблема осталась

359
Hibernate: проверка грамматики

Hibernate: проверка грамматики

Можно ли проверить через Hibernate грамматику конкретного SQL диалекта (Postgres, MySQL, Oracle и тд

200
Деплой приложения на JBoss AS 7.1

Деплой приложения на JBoss AS 7.1

При деплое приложения выводит такую ошибку:

332
Как лучше создать 3D график?

Как лучше создать 3D график?

Дана выборка точек с координатами X, Y и Z

223