Попытка получить текст через сокет

#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 закроет связанный сокет.