簡體   English   中英

路由器后面的android套接字編程

[英]android socket programming behind a router

我有疑問或問題。 我正在嘗試在兩部安卓手機之間建立 p2p 連接。 我讓每部電話都連接到我的服務器,並獲得它們的私有 (192.168.1.1) 和公共 (76.123.288.22) IP 以及它們連接到我的服務器的端口。 當手機連接到服務器以打開具有特定端口的服務器套接字時,我發送響應。 我還向另一部電話發送了開放套接字的公共 IP 和端口,但它沒有連接。 我在這里閱讀了多個線程,如果手機或計算機都在兩個不同的路由器后面,則無法進行 p2p 連接。 我的問題是這是否屬實,如果是,LogMeIn 或其他 p2p 應用程序如何在不同的路由器后面工作? 是編程錯誤還是網絡架構不允許?

有幾種技術可以實現這一點 - STUNTURNICE等等。 您可以閱讀它們中的每一個以及諸如 Skype、gtalk(現在 google talk 2018 年 3 月)等軟件。使用這些技術等。

但這里要理解的主要概念是,

  1. 您需要一個可公開訪問的 ip,以便您可以連接到它 如果它在專用網絡上的路由器后面,那么您需要在路由器上進行端口轉發,即您需要向該路由器添加規則,以將在特定端口上接收到的流量轉發到路由器后面的服務器。 在某種程度上,上述技術隱含地或通過涉及外部第 3 方服務器實現了這一點。

  2. 您需要在最初連接的機器上允許傳入連接 通常 windows 或 linux 防火牆會阻止所有傳入連接,除非添加例外。 這可能是您的兩個節點都需要的。

最后一部分,我不在 android 上編程,所以我不確定它是否允許為傳入連接添加規則等。但我知道 gtalk 有一個 android 客戶端,gtalk 使用 XMPP,它內部可以使用任何技術我在上面指出。 所以沒有理由相信為什么它不能在安卓手機上完成。

添加一些更有用的參考:

libjingle (2018 年 3 月更新鏈接)是 google 的一個開源庫,可用於編寫 p2p 應用程序,包括文本、音頻和視頻。

它似乎也已為 android 編譯here

“我的問題是這是否屬實,如果是,LogMeIn 或其他 p2p 應用程序如何在不同的路由器后面工作?”

這里的區別在於兩台機器的連接繼續通過中央服務器 - 它們不直接相互連接(特殊情況除外)。

根據設計,您想做的事情不起作用。 如果 TCP 可以做到這一點,那么任何人都可以連接到任何人。

您需要讓中央服務器將流量從一部手機傳遞到另一部手機與服務器建立的連接。

或者設置一個 VPN,或者使用谷歌瀏覽器打電話(名稱可能已經改變),這是一種向手機發送小消息的方式,無論網絡拓撲如何。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM