我正在开发一个 Android 实时数据应用程序,它通过 TCP 套接字将数据(浮点数和整数)发送到本地子网上的服务器。我面临的问题是,在同时发送一些数据后,套接字根本不再发送数据。我调试了应用程序,它显示数据正在发送,但没有显示在服务器上。发生这种情况后,如果我关闭连接,服务器甚至不会收到连接已终止的通知,根据我的设计模型它应该终止。同时,我在应用程序上遇到异常,说它无法写入损坏的管道。这告诉我问题出在应用程序上,因为我也使用桌面应用程序进行了测试,我可以将大量数据发送到服务器并交付。
请记住,我在这里谈论的数据大小是每个数据包252 字节。
这是我正在使用的课程。(这在一个AsyncTask
对象中运行)
public class Network
{
private Socket handle;
public static enum TASK
{
TASK_CONNECT, TASK_SEND, TASK_CLOSE
}
public Network()
{
}
public String lastError = "";
public boolean Connect(String host, int port)
{
try
{
lastError = "Connecting to server.";
handle = new Socket(host, port);
handle.setTcpNoDelay(true); //
handle.setSendBufferSize(SIZE_OF_PACKET); ///==> These don't seem to help at all
handle.setKeepAlive(true); ///
return true;
}catch(IOException e)
{
lastError += e.getMessage() != null ? " "+ e.getMessage() : "";
return false;
}
}
private void err(String e){
System.err.println(e);
}
private boolean SendPacket(byte buffer[])
{
OutputStream oStream = null;
err("sending: " + buffer.length + " bytes");
try
{
lastError = "Obtaining output stream.";
oStream = handle.getOutputStream();
lastError = "Error sending data.";
oStream.write(buffer);
oStream.flush();
return true;
}catch(Exception e)
{
lastError += e.getMessage() != null ? " "+ e.getMessage() : "";
}
return false;
}
public void Close()
{
try{ handle.close(); handle = null; }catch(Exception e){} // swallow exception
}
}
我根据我有多少数字循环发送我的数据。我尝试了谷歌搜索,但没有找到任何相关内容。有谁之前经历过这个吗?这让我现在很生气。
编辑:Wireshark 显示未到达桌面应用程序(服务器)的传入“红色”数据包看这张图片。 你可以看到前几个有Len > 0,红色有 0。
我认为现在是谷歌接口 USB 以便我们可以使用它的时候了。至少那会是我的第一选择。