2011-06-30 34 views
0

我想在java中編寫服務器和客戶端程序。我之前沒有這樣做過,所以我想我會從下面的鏈接提供的例子開始。Java服務器和客戶端 - 無法構建InetAddress

Server代碼: http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketServer.java

客戶端代碼: http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketClient.java

我做在命名方面的一些變化,但基本功能應該是相同的。服務器應用程序運行正常,但客戶端應用程序拋出UnknownHostException。我認爲這個問題可能與兩個應用中使用的IP地址無效有關。我在Mac上運行這個程序,並且我並不聲稱自己是IP地址的專家,但我認爲編寫代碼實際上可以打印出下面公佈的IP地址是個好主意,以防萬一這完全有幫助。

java.net.InetAddress address = java.net.InetAddress.getLocalHost(); 
System.out.println("IP Address  :"+address.getHostAddress()); 

但是,此代碼返回一些像463.827.201.789號(這裏沒有這一點,但只是爲了論證的目的),這絕對不會是我使用的是Socket構造的參數工作。

無論如何,我不知道這個問題是什麼,我需要幫助。

回答

0

打印InetAddress對象getHostAddress()方法打印地址的文本表示(如API中指定的,檢查http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#getHostAddress())。這應該是你電腦的IP地址? (或者可能是127.0.0.1,這個地址總是指向你的本地計算機)。

Socket類(http://download.oracle.com/javase/6/docs/api/java/net/Socket.html)在構造函數中需要InetAddress +端口號,所以您應該能夠通過它是InetAddress以及SocketServer偵聽的第一個參數和端口號。 (每個服務器套接字在端口號上打開一個監聽器,您可以自行選擇,請檢查http://download.oracle.com/javase/6/docs/api/java/net/ServerSocket.html)。

0

在行

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

你是怎麼規定的,而不是 「kq6py」? 假設您的服務器程序與客戶端運行在同一臺計算機上 - 您應該嘗試使用「localhost」或「127.0.0.1」

+0

這可能是問題所在。我剛剛試過這個權利後,我發佈它的工作: 'InetAddress addr = InetAddress.getLocalHost(); socket = new Socket(addr,4444);' – Slayer0248

+0

是的,基本上,'Socket'構造函數中的第一個參數應該具有服務器程序在端口4444上偵聽的主機的主機名或IP地址 - 現在,如果您覺得喜歡,請繼續並接受答案將會提高你在未來獲得更多答案的可能性。 –

+0

如果是不同的電腦,你會怎麼做?在我提出這個問題之前,我會在另一臺計算機上設置它,這樣可能會有所幫助,所以我不妨完成該實現。 – Slayer0248