gpt4 book ai didi

java - 电话在3G上时套接字超时,在Wifi上时起作用,为什么?

转载 作者:行者123 更新时间:2023-12-03 11:55:20 24 4
gpt4 key购买 nike

我正在编写一个客户端-服务器应用程序,我的客户端是一个android手机,我的服务器是我的笔记本电脑。

所以我的问题是这一行代码:

Socket connectionToServerSocket = new Socket(hostName, portNumber);

当我的手机通过家庭wifi连接到Internet时,它的工作原理非常好,并且当通过3G(蜂窝服务提供商)连接时,它只是超时,例如,它阻塞了一段时间,然后抛出了超时异常。

有趣的是,我可以看到(使用OS Monitor)某些应用程序通过非常常见的端口(例如端口#80)连接,但是将portNumber(以及服务器正在监听的端口)切换为80并没有。没有帮助(例如仍然超时),我尝试了许多不同的端口,结果相同。

DNS可以正常工作(例如,它将我给hostName的逻辑字符串转换为正确的IP),但它不会向服务器发送任何信息...
我迷路了,可能是什么原因?如何检查并解决?

最佳答案

我在做类似的应用程序时也遇到了这个问题。

您的笔记本电脑和手机可以在同一网络上互相连接,因为它们可以通过路由器共享IP地址查找。

当设备连接到WIFI时,请求将通过路由器传递以检查IP地址,它将找到您的笔记本电脑IP,并将请求保存到DNS,因为它已经可以找到笔记本电脑IP。便携式计算机的工作方式相同,它也通过路由器找到客户端的IP地址。

但是,当您的手机使用3G时,它无法确切知道您笔记本电脑的IP地址在哪里。这就是它超时的原因:它从您的路由器到最近的DNS(尝试解析正确的IP地址),如果它找不到与之匹配的域或IP,则会失败。

解决此问题的一些步骤。 。 。

  • 根据您的路由器,您可以为笔记本电脑的IP设置端口转发。这意味着到路由器的传入请求可以通过管道传输到便携式计算机的服务器实现中。
  • 然后,在笔记本电脑上转到像http://touch.whatsmyip.org/这样的任何网站,以获取笔记本电脑的IP。保存此内容以将其添加到您的客户端套接字设置中。
  • 要调试,直到您的笔记本电脑服务器可以看到DNS查找为止,请进入客户端代码并添加。

    套接字debugSocket = new Socket(“the.laptop.ip”,80);

  • 一些警告:
  • 根据您的路由器,您的IP在重启ip期间可能会更改
  • 通过端口转发任何带有IP的浏览器,例如178.12.434.01可以登录到笔记本电脑上的个人服务器

  • future 的变化:
  • 一旦专用服务器启动并运行,在域中注册,您就可以将上述ip参数更改为“your.domain.com”,并且在幕后将通过DNS查找找到服务器的实际IP地址。
  • 关于java - 电话在3G上时套接字超时,在Wifi上时起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973485/

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