我负责Android设备上的一些代码,这些代码通过无线接入点(WAP)通过WiFi与PC通信,使用TCP来回发送数据包。在PC端,软件使用winsock来发送和接收Android设备的数据包,但我无法访问或控制此连接的PC端。
这种架构可以很好地发送和接收,但如果没有正好1分钟的流量,那么如果PC尝试向Android发送数据包,它会返回一个RST,就好像Android不再听了。 PC端的Winsock正在解释这是暂停。
Android设备配置为保持WiFi"始终打开"。我在我的代码中使用了java.net(Android API 16)套接字。我是否可以定期检查该套接字,或者我可以收到的事件是否已停止收听?
(编辑)我具体指的是Android是否正在倾听。 1分钟后,Android设备仍然可以发送。这是一个Wireshark跟踪,说明了这一点:
Android为10.1.2.1,PC为10.1.2.11。在这个例子中,我发起了从Android到PC的发送,它很顺利。 PC尝试发送回复内容,但Android发送了[RST]
也是N.B.这只是指TCP - 如果PC在1分钟后尝试ping Android,它仍会得到响应,但ping是ICMP。
修改2
有人想知道我是如何创建套接字的。所以这就是:
new SocketPermission(new String(new StringBuilder(configLGIP).append(":180-")), "connect,accept,listen");
// Open a socket to the front end
Log.d("StartTCP", "attempt IP " + configLGIP);
try {
sock = new Socket(configLGIP, 180 + SafeActivity.pdanum);
}
后来我做了......
if (sock != null) try {
sock.setTcpNoDelay(true);
bin = new BufferedInputStream(sock.getInputStream());
答案 0 :(得分:0)
您必须通信设备。
您的Android设备正在发送RST标志,这表示在已寻址的端口上没有可用的服务。
以编程方式为了检测此类FLAG和不可用的服务,
通过实现原始套接字接口来创建自己的TCP数据报。
在本案例中,您可以分析数据报的标题。实现这样的Socket需要管理权限(我认为你在PC端有这种权限)。
这是more infos hier !
希望我能帮忙