首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当手机在3G上时套接字超时,当在Wifi上工作时-为什么?

当手机在3G上时套接字超时,当在Wifi上工作时-为什么?
EN

Stack Overflow用户
提问于 2016-05-02 08:19:45
回答 3查看 1.4K关注 0票数 2

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

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

代码语言:javascript
复制
Socket connectionToServerSocket = new Socket(hostName, portNumber);

当我的手机与我的家庭wifi连接到互联网时,工作得非常好,当通过3G (手机提供商)连接时,它只是超时,例如,它阻塞了一段时间,然后抛出超时异常。

奇怪的是,我可以看到(使用操作系统监视器)一些应用程序是通过非常常见的端口连接的,例如端口# 80,但是将portNumber (以及服务器正在侦听的端口)切换到80没有帮助(例如,它仍然超时),并且我尝试了许多不同的端口-同样的结果。

DNS工作正常(例如,它将我给hostName的逻辑字符串翻译成正确的IP),但它不会向服务器发送任何东西……我迷路了,到底是什么原因呢?我如何检查和解决它?

EN

回答 3

Stack Overflow用户

发布于 2016-05-02 08:45:04

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

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

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

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

解决这个问题的一些步骤。。。

  1. 根据您的路由器,您可以为笔记本电脑的IP设置端口转发。这意味着进入你的路由器的请求可以被输送到你的笔记本电脑的服务器上,去你的笔记本电脑上的任何站点,像这样的http://touch.whatsmyip.org/来获取你的笔记本电脑的IP地址。保存此设置以添加到您的客户端套接字设置。
  2. 用于调试,直到您的笔记本电脑服务器可见的DNS查找,进入您的客户端代码并添加此设置。

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

一些警告:

根据您的路由器,在restarts

  • With端口转发过程中,您的ip可能会发生变化。使用您的ip的任何浏览器都可以登录到您的笔记本电脑个人服务器。

未来的变化:

  • 在专用服务器启动并运行并注册到域后,您可以将上述ip参数更改为"your.domain.com",并在后台通过DNS查找找到服务器的实际IP地址。
票数 0
EN

Stack Overflow用户

发布于 2016-05-02 14:59:08

wifi案例1:当你的笔记本电脑和手机连接到时,它就可以工作了,对吧?

试一试这个

案例2:

  1. 将您的手机连接到3G。
  2. 在手机上启用hotspot。
  3. 将您的笔记本电脑连接到手机的Socket。如果笔记本电脑的IP地址发生更改,请替换Socket对象中的IP地址。Socket connectionToServerSocket = new Socket(newIP, portNumber);
  4. Run你的项目。

只要试一次,你就会明白我想说的。

您将收到超时异常,因为无法从外部网络访问拥有该服务的服务器。

希望这能有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2016-05-02 15:06:11

原因是默认情况下,笔记本电脑中的服务器对外部网络是关闭的,您需要做的是所谓的端口转发*请注意:端口转发会将您的服务器置于网络安全风险中,请确保您做出正确的调整以确保服务器的安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36973485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档