2012-11-10 128 views
0

我想製作一個基於android的信使,我正在設計這樣一種方式,即兩個互相聊天的te用戶都是服務器和客戶端。訪問不同網絡中具有一個基於公共IP的路由器並且設備具有本地IP地址的設備存在問題。我可以將消息發送到公共IP設備,但我無法使用公共接口路由器訪問本地網絡內的設備。 說 發件人IP:130.190.93.68 路由器的IP是:130.190.09.54 路由器專網內reciever的IP:192.168.15.186如何從互聯網上訪問本地IP設備

發送者希望與接收器通信。我如何使用套接字編程來實現它。

編輯代碼從評論:

public class SocketClient extends Activity { 
    private Socket socket; 
    private String serverIpAddress = "192.168.15.186"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bt = (Button) findViewById(R.id.myButton); 
     tv = (TextView) findViewById(R.id.myTextView); 

     InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
     socket = new Socket(serverAddr, 5000); 

回答

0

一種解決方案是有當用戶想與另外一個人聊天,用戶必須登錄到,和中央服務器,如果客戶之一在私人網絡上,另一個則不在私人網絡上的客戶端獲取公共網絡上客戶端的地址並啓動聊天會話。

如果均爲客戶端位於專用網絡上,則必須通過服務器。如果沒有客戶端在專用網絡上,則服務器隨機決定哪個客戶端應該是發起連接的客戶端。

+0

感謝Joachim,但問題是,當我使用代碼「new ServerSocket(ipAddress,port)」創建ServerSocket時,我需要給出IP地址以及如何獲取本地網絡中接收器的IP地址。你能告訴我,即使接收者在私人網絡中,Skype聯繫人如何知道對方的IP。 – learner

+0

@learner不是一個特定的地址,而是總是有一個通配符地址,這使得服務器套接字在所有接口(以及所有地址)上偵聽。據我所知,Skype使用的中央目錄服務器非常像我在我的回答中描述的服務器。 –

+0

我正在粘貼我的客戶端訪問服務器的代碼。你可以指導我修改它以訪問wildcarda地址 – learner

相關問題