![](/img/trans.png)
[英]Android programming: Authentication and data exchange with Java EE
[英]Send data to Android from Java EE
我正在尝试通过 TCP/IP 将数据从 Java EE 应用程序发送到 Android 应用程序。 在 Android 中,我在 AsyncTask 中有以下内容:
try {
ServerSocket serverSocket = new ServerSocket(48760);
while (true) {
Socket socket = serverSocket.accept();
// Do something interesting with sent data
}
} catch (IOException e) {
e.printStackTrace();
}
我已验证该应用程序一直执行,直到它按预期阻塞在 accept() 调用处。
在服务器端(Java EE)我使用:
// address contains the IP of the android device as a string.
InetAddress addr = InetAddress.getByName(address);
Socket conn = new Socket(addr, 48760);
在这里,当应用程序到达“new Socket()”时,我得到“java.net.ConnectException: Connection timed out: connect”。 关于为什么会这样的任何想法?
我的清单中有。 而且“地址”中的 ip 似乎是正确的(我的服务提供商提供的 ip)。
有没有更好的发送消息的方式? 我计划使用 Serializable 对象(从 Android 到 JavaEE,我使用 HTTP,通过 Servlet),但我愿意接受建议。
好的,你的工具有问题!
为什么你需要从服务器连接到客户端(谁在乎,但客户端现在是服务器!)!?
你必须解决这个问题!
让我们告诉你你的问题是什么!
如果您的服务器(JAVA EE 服务器)在公共互联网上,则意味着您的服务器具有公共 IP地址。 此公共 IP地址可从连接到 Internet 的所有设备访问! 您可以控制服务器的所有端口等等......,这样每个人都可以在公共互联网上连接到您的网络应用程序。
但是在客户端有些不同! 当您在客户端连接到互联网时,会发生这种情况:
您的问题在第 2 部分! 因为大多数ISP (s) 在客户端之间共享一个公共 IP ,所以这意味着当您分配的IP是ADDR_1 时,有另一个客户端具有相同的IP ADDR_1并且您无法控制其上的所有端口。 也许当您在本地网络中侦听端口 8080 时, ISP 会为您的公共 IP分配另一个端口(无论NAT会在大多数ISP 中阻止您的侦听端口)
因此,每个客户端都没有唯一的 IP,并且在公共互联网中很难找到它们(当 ISP 上存在新的NAT [Symmetric-NAT]时会更难)
有几种方法可以解决这个问题,但没有任何方法可以 100% 工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.