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

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

1 голос
/ 31 октября 2011

Я хочу общаться между клиентом на базе Android и сервером на основе c #.Я уже сделал это .. Но я хочу отправить байтовый массив клиенту на базе Android .. Обычно я посылаю строковое значение .. Когда я посылаю байтовый массив, это не работает !!В C # мы можем послать байтовый массив функции, которая находится в классе Socket. Но в Java, у меня нет никаких идей.Я искал, что я мог бы использовать DatagramSocket .. Но я хочу сделать это с классом Socket .. Ну, это на стороне 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 Side я использовал этот код (обычно, когда я отправляю строковое значение клиенту (Android), он работает .. В C # есть класс потока. Я могу отправить их с классом потока ..)

     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 () .. И она ожидает строковые значения .. Ну, эта функция зависит от класса сокетов .. Но мне нужна функция, которая получаетмассив байтов вместо getInputStream () ...

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

Спасибо

1 Ответ

1 голос
/ 31 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...