![](/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.