簡體   English   中英

SocketServer和套接字通信

[英]SocketServer and socket communication

我對使用localhost以外的主機時有關Java中的SocketServer和Socket連接有疑問。

我正在嘗試編寫一個簡單的聊天程序,希望與家里的其他人建立聯系。 這是我創建我的套接字服務器和套接字的代碼:

服務器部分:

    try{
        ServerSocket socket=new ServerSocket(4444);
        while(true){
            Socket socket1=socket.accept();
            new ClientThread(socket1);
        }

客戶部分:

      socket=new Socket("localhost",4444);

為了測試程序,我在計算機上打開兩個命令提示符,一個用於服務器,一個用於客戶端。 當我使用localhost作為主機時,一切正常。 同樣,當我使用在ipconfig下找到的IPv4地址時,它也可以正常工作。

但是,當我嘗試使用該地址時,我將從whatsmyip那里獲得主機地址。 例如:

      socket=new Socket("114.89.XX.XXX",4444);

我沒有連接,最后出現連接超時錯誤。

所以我的問題是:如何使它與114.89.XX.XXX IP一起工作? 另外,如果我想讓其他計算機連接到此SocketServer,則其他計算機在創建套接字時也應使用114.89.XX.XXX ip嗎?

評論太久了

您的主機運行在通過路由器與Internet隔離的本地網絡上,該網絡很可能是由ISP提供的。 主機的實際IP地址可能類似於192.168.xx ,這是一個本地專用地址,無法從Internet訪問。 傳出數據包和傳入回復均受NAT(網絡地址轉換)的約束。

whatismyip.com返回路由器與Internet 連接的IP地址,並且路由器的防火牆阻止所有傳入的流量。 如果要使其正常工作,以便Internet上的主機可以連接到服務器,則需要打開路由器防火牆上的端口,還需要配置路由器以將傳入流量轉發到主機。 可能還需要在主機上配置防火牆,以允許來自路由器的傳入流量。

對於StackOverflow而言,這一切都是離題的,因為它是基礎網絡中的教程。 它可能屬於ServerFault ,但也可能不在主題之內,因為它“太寬泛”。

聽起來您需要學習基本的網絡概念,包括路由,IP地址格式,防火牆,NAT和端口轉發。

暫無
暫無

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

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