gpt4 book ai didi

java - Android 客户端和 Windows 服务器之间的 TCP 连接在随机时间后中断

转载 作者:可可西里 更新时间:2023-11-01 02:54:24 24 4
gpt4 key购买 nike

我用 Java 为 Android 客户端和 PC 服务器(在我的例子中是 Windows)创建了一个分布式应用程序。 Android 应该永久保持连接以便能够接收推送通知。所以有一个后台服务可以在关闭屏幕后继续存在。 (请不要告诉我使用 GCM。它超出了范围,因为我必须连接到 Internet。)为了测试,客户端每 5 分钟发送一个自制的(应用层)ping 数据包 到服务器,服务器将其作为 pong 发回(在延迟后),作为返回被确认 (ack)。当 Server 收到 ack 时,延迟增加 25 秒。

然而,随机地 - 看起来 - 服务器声称客户端不正常地关闭了带有此错误消息的连接:

android java.io.IOException: An existing connection was forcibly closed by the remote host

我注意到有一些因素会延迟(而不是解决!)这个问题:

  • 同一无线网络 AP 上的其他 wifi 网络 Activity 。
  • 在 Android 设备上激活并启动 Google 服务框架。
  • 通过 cygwin/ssh 设置 SSH 隧道并通过该隧道连接到服务器。

我确定以下组件没有影响:

  • Oracle JDK 与 openJDK(均为版本 7、32 位、Windows)
  • 网卡(尝试过不同的 USB wifi 棒和电缆)
  • Wifi AP(使用 DWL-2100AP、Netgear WGT624 v2、FritzBox 6360)
  • 使用 Galaxy Nexus (4.3) 与使用 Galaxy Nexus 4 (4.2.2)

如果我在 Linux (Ubuntu) 机器上运行服务器程序,没有连接失败。

这些连接问题的原因可能是什么?如何在不切换到 Linux 的情况下摆脱它们?

最佳答案

我在操作系统版本 4.3 上遇到了同样的问题。我假设您正在从事服务工作,此代码段可能会帮助您保持连接状态

private PowerManager.WakeLock mWakeLock;
public override void OnCreate ()
{
PowerManager pm = (PowerManager) GetSystemService(Context.PowerService);
mWakeLock = pm.NewWakeLock (WakeLockFlags.Partial, "PartialWakeLockTag");
mWakeLock.Acquire();
}

public override void OnDestroy ()
{
mWakeLock.Release();
}

显然,通过保持设备 CPU 处于 Activity 状态,您可以快速消耗电池电量

关于java - Android 客户端和 Windows 服务器之间的 TCP 连接在随机时间后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28212680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com