Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
mikl-123
0 / 0 / 0
Регистрация: 11.05.2017
Сообщений: 1
#1

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

11.05.2017, 20:15. Просмотров 223. Ответов 0
Метки нет (Все метки)

Добрый день!
Пытаюсь настроить непрерывный обмен пакетами между клиентом и сервером. Сервер работает на Twisted (Python).
Есть работающий клиент на Python. Принцип такой: клиент подсоединяется к серверу (отправляет пустое сообщение ""), в ответ от сервера приходит json-массив вида [идентификационный номер игрока]. После этого клиент отправляет простой json-массив ["start"], после чего от сервера приходит json-массив, содержащий начальные данные клиента [Xнач., Yнач. ...].
Начал писать клиент на Java под Андроид, но почему-то после отправки пустого сообщения и получения первого json-массива с идентификационным номером игрока, на следущее отправленное на сервер json-сообщение ["start"] не получаю ответа (null). Использую AsyncTask для создания непрерывного обмена пакетами без разрыва соединения (я так понимаю, что для работы серверной фабрики Twisted, необходимо удерживать соединение). В чём может быть причина (вопрос только относительно работы клиента: почему аналогичный клиент на Python продолжает обмениваться пакетами с сервером, а клиент на Java получает ответ только на первую пустую строку)?


Клиент на Python (работает):

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 (но почему-то получает ответ от сервера только на первое пустое сообщение):

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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();
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2017, 20:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не получается установить непрерывное соединение клиент-сервер (Java-Twisted) (Программирование Android):

Клиент -android, сервер -java app
Здравствуйте, помогите пожалуйста! Есть Клиент под андроид и сервер на java на...

Клиент-сервер, Django(Python), MySQL и Java (выбор)
Всем доброго времени суток. Задача: Собираюсь сделать клиент-серверное...

Установить соединение клиент-сервер
По идее код правильный. Но выдает ошибку((( :-1: ошибка: Error 1 :25: Parse...

Не устанавливается соединение сервер+клиент
Взял за образец вот от сюда:...

Постоянное соединение клиент-сервер
Доброго времени суток уважаемые. Возникла такая проблема: Требуется...

Не получается установить соединение с БД
Доброго времени суток:) Вообщем почитал FAQ раздела, и решил попробовать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2017, 20:15
Привет! Вот еще темы с решениями:

Приложение клиент-сервер, соединение со второго раза
Добрый день. Почему-то в следующей элементарной программе соединение клиента с...

Кто разорвал соединение - клиент или сервер?
Здравствуйте. В моей программе есть клиент и сервер (TClientSocket,...

Java сервер Flash клиент java.io.StreamCorruptedException: invalid stream header
Есть класс сериализованный на стороне java (сервер) и actionscript(клиент). При...

Не получается установить соединение с SQL сервером
Доброго всем дня! Помогите несчастному чайнику. Уже третий день пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru