在本文中,我們將討論使用Socket類的基本步驟和方法。壹般網絡客戶端程序在連接服務程序時要進行以下三步操作。
1.連接服務器
2.發送和接收數據
3.關閉網絡連接
壹、連接服務器
在客戶端可以通過兩種方式來連接服務器,壹種是通過IP的方式來連接服務器,而另外壹種是通過域名方式來連接服務器。
其實這兩種方式從本質上來看是壹種方式。在底層客戶端都是通過IP來連接服務器的,但這兩種方式有壹定的差異,如果通過IP方式來連接服務端程序,客戶端只簡單地根據IP進行連接,如果通過域名來連接服務器,客戶端必須通過DNS將域名解析成IP,然後再根據這個IP來進行連接。
在很多程序設計語言或開發工具中(如C/C++、Delphi)使用域名方式連接服務器時必須自己先將域名解析成IP,然後再通過IP進行連接,而在Java中已經將域名解析功能包含在了Socket類中,因此,我們只需象使用IP壹樣使用域名即可。
通過Socket類連接服務器程序最常用的方法就是通過Socket類的構造函數將IP或域名以及端口號作為參數傳入Socket類中。Socket類的構造函數有很多重載形式,在這壹節只討論其中最常用的壹種形式:public Socket(String host, int port)。從這個構造函數的定義來看,只需要將IP或域名以及端口號直接傳入構造函數即可。下面的代碼是壹個連接服務端程序的例子程序:
package mysocket;
import java.net.*;
public class MyConnection
{
public static void main(String[] args)
{
try
{
if (args.length > 0)
{
Socket socket = new Socket(args[0], 80);
System.out.println(args[0] + "已連接成功!");
}
else
System.out.println("請指定IP或域名!");
}
catch (Exception e)
{
System.err.println("錯誤信息:" + e.getMessage());
}
}
}
在上面的中,通過命令行參數將IP或域名傳入程序,然後通過Socket socket = new Socket(args[0], 80)連接通過命令行參數所指定的IP或域名的80端口。由於Socket類的構造函數在定義時使用了throws,因此,在調用Socket類的構造函數時,必須使用try…catch語句來捕捉錯誤,或者對main函數使用throws語句來拋出錯誤。
測試正確的IP
java mysocket.MyConnection 127.0.0.1
輸出結果:127.0.0.1已經連接成功!
測試錯誤的IP
java mysocket.MyConnection 10.10.10.10
輸出結果:錯誤信息:Connection timed out: connect
註:10.10.10.10是壹個並不存在的IP,如果這個IP在妳的網絡中存在,請使用其它的不存在的IP。
測試正確的域名
java mysocket.MyConnection www.ptpress.com.cn
輸出結果:www.ptpress.com.cn已經連接成功!
測試錯誤的域名
java mysocket.MyConnection www.ptpress1.com.cn
輸出結果:錯誤信息:www.ptpress1.com.cn
使用Socket類連接服務器可以判斷壹臺主機有哪些端口被打開。下面的代碼是壹個掃描本機有哪些端口被打開的程序。