【问题标题】:Android socket works only in local networkAndroid 套接字仅在本地网络中有效
【发布时间】:2013-03-25 14:16:57
【问题描述】:

我最近遇到了一个非常荒谬的问题...... 我正在创建一个应用程序,它应该从 Android(当然是 Java)连接到服务器(用 C# 编写)

客户端(Java)的代码如下:

InetAddress serverAddr = InetAddress.getByName(SERVERIP); //My IP in a constant, it works with a local one...
Log.e("TCP Client", serverAddr.getHostAddress()); //Just to debug
Socket socket = new Socket(serverAddr, SERVERPORT); //Here I get an exception for the global IP

奇怪的是昨天一切仍然正常......我没有更改任何有关端口转发的内容,端口仍然转发到我的计算机。我还在 Android Manifest 中设置了“INTERNET”权限。

服务器代码是用 C# 编写的,也很简单,只是为了测试:

Console.WriteLine("Waitng for connection");
TcpClient client = Server.AcceptTcpClient();
NetworkStream ns = client.GetStream();

这里我永远不会得到 TCPClient 对象,因为之前客户端上的连接超时。没有任何东西通过服务器。

如上所述,这很奇怪,因为昨天似乎一切正常。

【问题讨论】:

  • 这是一个 java.net.ConnectException,它告诉我“无法连接到 /IP(端口 1337)”并且如上所述连接已超时。
  • 从您的家庭网络外部进行端口扫描,查看端口是否真的打开。您的 ISP 可能正在过滤端口 1024 以上的传入连接。此外,您的移动提供商可能正在过滤到“奇怪”端口的传出连接。
  • 服务器是否真的在监听端口 1337 和有效的 IP 地址?正如文档所述,典型的场景是服务器没有在监听

标签: c# java android sockets client-server


【解决方案1】:

可能是您昨天通过 Wifi 连接,而现在您尝试通过 3G/GPRS 连接进行连接。因为如果您使用的是 Wifi 连接,那么您的服务器和 Android 可能在同一个网络上导致连接成功。

您是否确保服务器可以在网络外部(我的意思是公开)访问?

【讨论】:

  • 是的,似乎是这样......我曾经(现在仍然)用我的手机在 wifi 上。而且我的wifi网络有点……奇怪,所以我现在重新启动路由器并更改了频率/频道。现在它再次工作,也通过我的移动 ISP 提供的 HSDPA。非常感谢,即使解决方案略有不同。端口也不错:)
  • 很高兴听到...谢谢....有时这是人们永远不会整天看着和抓挠头发的小东西之一...
  • @user2207831- 我也尝试从 c# 连接到 android EDEG/HSDPA 但没有成功。你能帮帮我吗?
  • @DeepSan 您的服务器是否在公共 IP 地址上,并且端口没有被防火墙阻止?
  • @user2207831 谢谢兄弟。我已经在同一天解决了这个问题...现在可以将数据从 c# 传输到 android 应用程序..
猜你喜欢
  • 2015-03-19
  • 1970-01-01
  • 2013-03-18
  • 2021-06-24
  • 1970-01-01
  • 2015-05-24
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多