Связь с клиентом Android

#android #sockets #client

#Android #сокеты #клиент

Вопрос:

Я хочу обмениваться данными между клиентом на базе Android и сервером на базе c #. Я уже это сделал.. Но я хочу отправить массив байтов клиенту на базе Android.. Обычно я отправляю строковое значение.. Когда я отправляю массив байтов, он не работает!! В C # мы можем отправить байтовый массив функции, которая находится в классе сокетов.. Но на стороне Java я понятия не имею. Я искал, что я мог бы использовать DatagramSocket.. Но я хочу сделать это с помощью класса сокетов.. Ну, это на стороне c #..

 public void Send(byte[] buffer)
        {
            try
            {                
                cSocket.Send(buffer);
            }
            catch (SocketException s_ex)
            {
                Console.WriteLine(s_ex);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
        public void ReceiveListen()
        {            
            while (true)
            {
                try
                {
                    buffer = new byte[8192];

                int socketStatus = cSocket.Receive(buffer);
                    if (socketStatus!= 0)
                    {
                        Array.Resize(ref buffer, socketStatus);

                    Parse(buffer);
                }
            }
            catch
            {
            }

            Thread.Sleep(100); 
        }
    } 
 

как вы видите, я могу отправить массив байтов и получить тот же тип…
На стороне Android я использовал этот код (обычно, когда я отправляю строковое значение клиенту (Android), оно работает.. В C # есть класс stream.. Я могу отправить их с помощью stream class ..)

      try {
          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                        String line = null;
                        while ((line = in.readLine()) != null) {
                            Log.d("ServerActivity", line);
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                     serverStatus.setText("Connected");
                                }
                            });
                        }
                        break;
                    } catch (Exception e) {
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
                            }
                        });
                        e.printStackTrace();
                    }
 

Что ж.. Он работает со строковыми значениями.. Как вы видите .. есть функция getInputStream().. И он ожидает строковые значения.. Ну, эта функция зависит от класса сокета.. Но мне нужна функция, которая получает байтовый arrray вместо getInputStream() …

Я надеюсь, что я мог бы также объяснить свою проблему..

Спасибо

Комментарии:

1. Вы можете попробовать Integer.toString(1234567890);

Ответ №1:

Вы должны попробовать socket.getInputStream().read(байт [] b) . Сервер также может отправлять количество байтов перед массивом байтов, чтобы клиент знал, сколько их ожидается.

Комментарии:

1. Вау, это интересно.. Я никогда не пробую это .. и я буду.. Это выглядит великолепно!! Спасибо