我目前正在使用套接字在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);
}
}
在控制台的内容输出中,我看到的是空白,而不是应该接收的数据。 (请注意,此问题仅偶尔发生)