R
R
Rinat00102016-08-09 05:29:59
Java
Rinat0010, 2016-08-09 05:29:59

How to get a response from the server?

Hello! Began to deal with scootes in androyd. A server program was written in java and an android client. Messages reach the server from the phone and are displayed correctly. The response from the server is "android.v" even though I'm sending the exact same message that came from the client.
Please help me figure it out.

Client code:

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) {


        }
    };
}

server code:
/*
 * 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(); }
   }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
L
Labunsky, 2016-08-09
@Labunsky

In the client loop, the correct moment is commented out. Probably meant the following code:

while (b) {
     out.writeUTF(line); // отсылаем введенную строку текста серверу.
     out.flush(); // заставляем поток закончить передачу данных.

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

    b=false;
}

In the code given in the question, the string from the server is not accepted in principle.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question