@Rinat0010

Как получить ответ от сервера?

Здравствуйте! Начал разбираться с скоетами в андройде. Была написана программа-сервер на java и android клиент. С телефона сообщения доходят до сервера и отображаются корректно. Ответ от сервера - "android.v", хотя я отправляю то же самое сообщение что пришло от клиента.
Прошу помочь разобраться.

код клиента:
package com.example.norfel.threads2;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.net.*;
import java.io.*;

public class MainActivity extends AppCompatActivity {
    TextView tvOut;
    Button btnOk;
    Button btnCancel;

    int mCounter=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tvOut = (TextView) findViewById(R.id.tvOut);
        btnOk = (Button) findViewById(R.id.btnOk);
        btnCancel = (Button) findViewById(R.id.btnCancel);



        View.OnClickListener oclBtnOk = new View.OnClickListener() {
            @Override
            public void onClick(View vv) {
                Runnable runnable = new Runnable() {
                    public void run() {
                        String address = "192.168.0.76";
                        int serverPort=15000;
                        try {
                            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
                            Socket socket = new Socket(ipAddress, serverPort);



                            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом.
                            InputStream sin = socket.getInputStream();
                            OutputStream sout = socket.getOutputStream();

                            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                            DataInputStream in = new DataInputStream(sin);
                            DataOutputStream out = new DataOutputStream(sout);

                            // Создаем поток для чтения с клавиатуры.
                            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
                            String line =null;
                            line="asd";
                            boolean b=true;
                            while (b) {
                                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                                out.flush(); // заставляем поток закончить передачу данных.
                               // line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                                in = new DataInputStream(socket.getInputStream());
                                tvOut.setText(in.toString());
                                b=false;
                            }



                        }
                        catch (Exception x){
                            x.printStackTrace();

                            tvOut.setText(x.toString());


                        }
                        Log.i("Thread","");
                        handler.sendEmptyMessage(0);

                    }
                };
                Thread thread = new Thread(runnable);
                thread.start();
            }
        };

        // присвоим обработчик кнопке OK (btnOk)
        btnOk.setOnClickListener(oclBtnOk);


    }
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {


        }
    };
}

код сервера:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;
import java.net.*;
import java.io.*;
public class JavaApplication1 {
   public static void main(String[] ar)    {
     int port = 15000; // случайный порт (может быть любое число от 1025 до 65535)
       try {
           
         ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
         System.out.println("Waiting for a client...");

         Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
         System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
         System.out.println();

 // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту. 
         InputStream sin = socket.getInputStream();
         OutputStream sout = socket.getOutputStream();

 // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
         DataInputStream in = new DataInputStream(sin);
         DataOutputStream out = new DataOutputStream(sout);

         String line = null;
        
           line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
           System.out.println("The dumb client just sent me this line : " + line);
           System.out.println("I'm sending it back...");
           
           out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
           out.flush(); // заставляем поток закончить передачу данных.
           System.out.println("Waiting for the next line...");
           System.out.println();
         
      } catch(Exception x) { x.printStackTrace(); }
   }
}
  • Вопрос задан
  • 1654 просмотра
Пригласить эксперта
Ответы на вопрос 1
Labunsky
@Labunsky
Я есть на хабре
В цикле клиента верный момент закомментирован. Вероятно, позразумевался следующий код:
while (b) {
     out.writeUTF(line); // отсылаем введенную строку текста серверу.
     out.flush(); // заставляем поток закончить передачу данных.

    line = in.readUTF(); // ждем пока сервер отошлет строку текста.
    tvOut.setText(line);

    b=false;
}

В приведенном же в вопросе коде строка от сервера не принимается в принципе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы