В настоящее время я использую сокеты для связи между устройством Android и приложением C # (все в одной сети).Недавно я столкнулся с проблемой, которая иногда возникала при отправке данных из моего приложения для Android на C #.Мое приложение C # получает пробельные символы, а не данные, которые я отправил с Android.Когда я снова отправляю те же данные (после сбоя), появляются новые данные, но старые данные теряются.У меня такое ощущение, что пробельные символы - это данные, которые я ранее отправил, но каким-то образом "испортился"?Я не совсем уверен, что происходит.Вот весь соответствующий код.
Кроме этих случайных проблем, все остальное работает нормально.
BUFFER_SIZE - 1024 для обоих приложений.
Сторона Android (отправка данных):
SocketChannel s = SocketChannel.open();
s.configureBlocking(false);
s.connect(addr);
...
public void write(String data) throws IOException{
Log.d("SocketClient","In Write method");
ByteBuffer temp = ByteBuffer.allocate(BUFFER_SIZE);
temp.clear();
temp.put(data.getBytes());
temp.flip();
Log.d("SocketClient","In Write method: wrote: "+String.valueOf(temp.array()));
while(temp.hasRemaining()){
s.write(temp);
}
}
Сторона C # (получение данных):
byte[] buffer = new byte[BUFFER_SIZE];
socket.BeginReceive(buffer, 0, BUFFER_SIZE, SocketFlags.None,
new AsyncCallback(ReadCallback), this.client);
...
public void ReadCallback(IAsyncResult ar)
{
try
{
bytesRead = handler.EndReceive(ar);
}catch(Exception e)
{
Console.WriteLine(e.StackTrace);
}
Console.WriteLine("In read callback data receieved");
if (bytesRead > 0)
{
content = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("content is = " + content);
}
}
В выводе консоли для содержимого я вижу пустые пробелы вместо данных, которые я должен получить.(Обратите внимание, что эта проблема возникает только изредка)