#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. Вау, это интересно.. Я никогда не пробую это .. и я буду.. Это выглядит великолепно!! Спасибо