我正在编写一个客户端-服务器应用,我的客户端是一部android手机,我的服务器是我的笔记本电脑。
所以我的问题是这一行代码:
Socket connectionToServerSocket = new Socket(hostName, portNumber);当我的手机与我的家庭wifi连接到互联网时,工作得非常好,当通过3G (手机提供商)连接时,它只是超时,例如,它阻塞了一段时间,然后抛出超时异常。
奇怪的是,我可以看到(使用操作系统监视器)一些应用程序是通过非常常见的端口连接的,例如端口# 80,但是将portNumber (以及服务器正在侦听的端口)切换到80没有帮助(例如,它仍然超时),并且我尝试了许多不同的端口-同样的结果。
DNS工作正常(例如,它将我给hostName的逻辑字符串翻译成正确的IP),但它不会向服务器发送任何东西……我迷路了,到底是什么原因呢?我如何检查和解决它?
发布于 2016-05-02 08:45:04
我在做一个类似的应用程序时也遇到过这个问题。
您的笔记本电脑和电话可以在同一网络中相互连接,因为它们通过您的路由器共享IP地址查找。
当设备连接到WIFI时,它的请求将通过路由器检查IP地址,它将找到您的笔记本电脑IP并将请求保存到DNS,因为它已经可以找到笔记本电脑的IP地址。笔记本电脑的工作方式与此相同,它也会通过路由器找到客户端的Ip地址。
然而,当您的手机是3G,它无法确切知道您的笔记本电脑的IP地址在哪里。这就是它超时的原因:它从你的路由器转到最近的DNS (在那里它试图解析正确的IP地址),如果它找不到与它匹配的域或IP,它将失败。
解决这个问题的一些步骤。。。
Socket debugSocket =新套接字(“the.laptop.ip”,80);
一些警告:
根据您的路由器,在restarts
未来的变化:
发布于 2016-05-02 14:59:08
wifi案例1:当你的笔记本电脑和手机连接到时,它就可以工作了,对吧?
试一试这个
案例2:
Socket connectionToServerSocket = new Socket(newIP, portNumber);只要试一次,你就会明白我想说的。
您将收到超时异常,因为无法从外部网络访问拥有该服务的服务器。
希望这能有所帮助:)
发布于 2016-05-02 15:06:11
原因是默认情况下,笔记本电脑中的服务器对外部网络是关闭的,您需要做的是所谓的端口转发*请注意:端口转发会将您的服务器置于网络安全风险中,请确保您做出正确的调整以确保服务器的安全。
https://stackoverflow.com/questions/36973485
复制相似问题