2012-07-02 66 views
0

我爲我的聊天應用程序使用java.nio package。但是,它只能連接本地主機中的不同客戶端。我怎樣才能連接來自不同IP地址的多個客戶端?來自不同pc的不同客戶端使用java中的ip與服務器通信

目前我連接到我的客戶端使用下面的代碼:

InetAddress.getByName("10.10.10.172"); 

我希望能夠從擁有10.10.10.123的IP地址,其具有一個服務器的客戶端發送郵件IP地址10.10.10.124。

謝謝!

+0

你的問題是沒有意義的。你根本不'連接'客戶端,他們連接到你,'InetAddress.getByName(「10.10.10.172」);'不執行任何連接功能。您所要做的就是正確指定目標IP,而不是定位您的本地主機。 – EJP

+0

@EJP首先認識到這是一些代碼和'InetAddress.getByName(「10.10.10.172」);(這個函數執行給定的字符串將轉換爲一個IP)'這是一個ma類的參數。唯一的一點是客戶端的ip應該和Server相同。它的工作現在好馬防火牆阻止多數民衆贊成在所有的感謝 – Amith

+0

我知道它是什麼。你寫的東西沒有意義。感謝您澄清它。 – EJP

回答

3

我認爲它以同樣的方式,你有臺PC做.......

還有一件事我啓動之前.. 10.10.10.777 & 10.10.10.888是無效的IP地址

IPv4是點分十進制格式0-255

0 - 網絡地址 255 - 廣播地址

0和255不用於給IP到PC ... 使用1 - 254

而且嘗試使用1024以上端口,這些端口都知道作爲衆所周知的端口和用於運行的各種服務,如SMTP,FTP,HTTP,TELNET等.....

思要記住....

  1. 關掉你的火焰牆否則會爲要在其中運行服務器的端口的防火牆中的規則添加例外。

  2. 創建單獨的線程在服務器端處理多個客戶端 ..

如:

The Server side code example: 


public class ServerTest { 

    ServerSocket s; 

    public void go() { 

     try { 
      s = new ServerSocket(44457); 

      while (true) { 

       Socket incoming = s.accept(); 
       Thread t = new Thread(new MyCon(incoming)); 
       t.start(); 
      } 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

    } 

    class MyCon implements Runnable { 

     Socket incoming; 

     public MyCon(Socket incoming) { 

      this.incoming = incoming; 
     } 

     @Override 
     public void run() { 

      try { 
       PrintWriter pw = new PrintWriter(incoming.getOutputStream(), 
         true); 
       InputStreamReader isr = new InputStreamReader(
         incoming.getInputStream()); 
       BufferedReader br = new BufferedReader(isr); 
       String inp = null; 

       boolean isDone = true; 

       System.out.println("TYPE : BYE"); 
       System.out.println(); 
       while (isDone && ((inp = br.readLine()) != null)) { 

        System.out.println(inp); 
        if (inp.trim().equals("BYE")) { 
         System.out 
           .println("THANKS FOR CONNECTING...Bye for now"); 
         isDone = false; 
         s.close(); 
        } 

       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       try { 
        s.close(); 
       } catch (IOException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       e.printStackTrace(); 
      } 

     } 

    } 

    public static void main(String[] args) { 

     new ServerTest().go(); 

    } 

}

+0

我應該在pc1(ip:10.10.10.222)中運行我的服務器,並且我的客戶端在pc2(ip:10.10.10.333)中運行。可以切斷和客戶端通信。我改變了我的服務器代碼'InetAddress.getByName(「10.10.10。222「);''和客戶''InetAddress.getByName(」10.10.10.333「);'在運行時在不同的pc上運行'拒絕連接客戶端的異常'有沒有我錯過的步驟請幫我 – Amith

+0

客戶端必須使用相同的ip服務器rit,所以我們必須更改'InetAddress.getByName(「10.10.10.333」);'給InetAddress.getByName(「10.10.10.222」); – Amith

+0

感謝他與防火牆相關的問題 – Amith

相關問題