socket的構造方法有以下幾種過載形式:
(1) socket()
(2) socket(inetaddress address,int port)throws unknownhostexception,ioexception
(3) socket(inetaddress address,int port,inetaddress localaddr,int localport)throws ioexception
(4) socket(string host,int port)throws unknownhostexception,ioexception
(5) socket(string host,int port,inetaddress localaddr,int localport)throws ioexception
一、設立等待建立連線的超時時間
當客戶端的socket構造方法請求與伺服器連線時,可能要等待一段時間。預設情況下,socket構造方法會一直等下去,直到連線成功,或者出現異常。socket構造方法請求連線時,受底層網路的傳輸速度的影響,可能會處於長時間的等待狀態。如果希望設定等待連線的時間,該如何做呢?
此時就需要用到第乙個不帶引數的構造方法:
1 socket socket=newsocket();
2 socketaddress remoteaddr=new inetsocketaddress("localhos",8000);
3 socket.connect(remoteaddr,60000);
以上**用於連線到本地機器上的監聽8000埠的服務程式,呆呆連線的最長時間為一分鐘。如果在一分鐘內連線成功,則connect()方法順利返回;如果在一分鐘內出現異常,在丟擲該異常。如果在一分鐘後,既沒有連線成功,也沒有出現其他異常,那麼會丟擲sockettimeoutexception。socket類的connect(socketaddress endpoint,int timeout)方法負責連線伺服器,引數endpoint指定伺服器的位址,引數timeout設定超時時間,以毫秒為時間,吐過引數timeout設為0,表示永遠不會超時。
二、設定伺服器的位址
除了第乙個不帶引數的構造方法,其他構造方法都需要在引數中設定伺服器的位址,包括伺服器的ip位址或主機名,以及埠:
1 socket(inetaddress address,int port) //第乙個引數address表示主機的ip位址;
2 socket(string host,int port) //
第乙個引數表示主機的名字
inetaddress類表示伺服器的ip位址,inetaddress類來提供了一系列靜態工廠方法,用於構造自身的例項,例如:
//返回本地主機的ip位址
inetaddress addr1=inetaddress.getlocalhost();
//返回代表"222.34.5.7"的ip位址
inetaddress addr2=inetaddress.getbyname("222.34.5.7");
//返回網域名稱為"www.cnblogs.com"的ip位址
inetaddress addr3=inetaddress.getbyname("www.cnblogs.com");
三、設定客戶端的位址
在乙個socket物件中,既包括遠端伺服器的ip位址和埠資訊,也包含本地客戶端的ip位址和埠資訊。預設情況下,客戶端的ip位址來自客戶程式所在的主機,客戶端的埠則有作業系統隨機分配。socket的類還有兩種構造方法允許顯示的設定客戶端的ip位址和埠:
1//引數localaddress和localport用來設定客戶端的ip位址和埠。
2 socket(inetaddress address,int port,inetaddress localaddr,int localport)throws
ioexception
3 socket(string host,int port,inetaddress localaddr,intlocalport)throws ioexception
如果乙個主機同時屬於兩個以上的網路,他就可能擁有兩個以上的ip位址。例如,乙個主機在internet網路中的ip位址為「222.67.1.34」,在乙個區域網中的ip為「112.5.4.3」。假設這個主機上的,客戶端程式希望和同乙個區域網上的乙個伺服器程式通訊,客戶可按照如下方式構造socket物件:
1 inetaddress remoteaddr=inetaddress.getbyname("112.5.4.45")2 inetaddress localaddr=inetaddress.getbyname("112.5.4.3")
3 socketsocket=new socket(remoteaddr,8000,localaddr,2345)//
客戶端使用埠2345
四、客戶連線伺服器是可能跑出的異常
當socket的構造方法請求連線伺服器是,可能會丟擲下面的異常。
*unknownhostexception:如果無法識別主機的名字或者ip位址,就會丟擲這種異常。
*connectexception:如果沒有伺服器程序監聽指定的埠,或者伺服器程序拒絕連線,就會丟擲這種異常。
*socketexception:如果等待連線超時就會丟擲這種異常。
*bindexception:如果無法把socket物件與指定的本機ip位址或埠繫結,就會丟擲這種異常。
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...