TCP连接有时会收到空白字符

时间:2018-11-21 18:35:22

标签: c# android sockets

我目前正在使用套接字在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);
    }
}

在控制台的内容输出中,我看到的是空白,而不是应该接收的数据。 (请注意,此问题仅偶尔发生)

0 个答案:

没有答案