【发布时间】: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