#android #sockets
#Android #сокеты
Вопрос:
Я пытаюсь выполнить простой тест отправки данных в сокет, куда серверная программа затем отправляет данные обратно. Я могу отправить данные, но, похоже, не получаю данные обратно. Я проверил серверную программу, успешно получил данные и использовал wireshark для просмотра трафика, а серверная программа отправляет данные, но мой клиент не может получить данные. Я скрыл IP-адрес и порт по понятным причинам.
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
//TODO Need filshills public ip address
echoSocket = new Socket("xxxxxx",xx);
} catch (UnknownHostException e) {
System.err.println("Don't know about host.");
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
"the connection to host.");
}
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(echoSocket.getOutputStream())), true);
//PrintWriter pw = new PrintWriter(echoSocket.getOutputStream(), true);
pw.flush();
pw.print("MS01,test,06,000027,01rn");
pw.close();
try{
BufferedReader stdIn = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
String check = stdIn.readLine();
check = check "";
//BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " in.readLine());
stdIn.close();
}
}catch ( Exception e)
{
String neil = e.getMessage();
neil = neil "";
}
out.close();
in.close();
echoSocket.close();
Комментарии:
1. вы уверены, что сервер отправил / r / n в конце?
2. Вы пробовали делать. flush() ПОСЛЕ вызова .close()?
3. да, никакой радости, стандартный идентификатор всегда равен нулю. это выдавало мне ошибку принудительного закрытия, когда я вызывал строку BufferedReader для начала
Ответ №1:
Попытка не закрывать PrintWriter
, согласно getOutputStream, close
закроет сокет:
Закрытие возвращенного OutputStream закроет связанный сокет.