2

现在,我正在编写一个服务器/客户端程序,以允许用户通过 Android 手机即时控制计算机的不同部分。服务器在电脑上运行,客户端在安卓手机上运行。我正在使用套接字编程来做到这一点,计算机上的 WinSocket 和手机上的 Android/Java 套接字。

什么有效:

  1. 计算机端的服务器工作。
  2. 当在同一个 wifi 网络上时,手机上的客户端可以向/从服务器发送和接收命令。
  3. 可以从它所连接的本地无线网络外部访问该服务器。我通过使用这个开放端口检查工具向服务器发送请求来测试这一点。服务器可以成功接收请求,端口检查网站报告我正在使用的端口正确转发。
  4. 在我的安卓手机上使用测试开放端口的应用程序时,我的服务器通过 3G/4G 获取连接请求。

现在解决我的问题。当我尝试从手机上的客户端连接到电脑上运行的服务器时,当手机通过 3G 或 4G 连接到互联网时,socket 什么都不做,并抛出一个 socket 超时异常,并且服务器没有收到任何来自电话的连接请求。我不明白这一点,因为就像上面的第四件事一样,我使用的端口检查应用程序可以通过我的服务器程序,但是我将在下面发布的代码在 3G/4G 上运行时没有任何作用。

String hostName = "SERVER_NETWORK_EXTERNAL_IP_HERE";
int port = 58587;
SocketAddress address = new java.net.InetSocketAddress(hostName, port);
sock = new Socket();
sock.connect(address, 5000);

运行此代码时,屏幕顶部状态栏中的网络活动指示器不会报告出站网络活动,但是如果我连接到 wifi,一切正常。有人有什么想法吗?

4

0 回答 0