天天看點

Java Socket 執行個體

第一步 充分了解Socket

   1.什麼是socket

   所謂socket通常也稱作"套接字",用于描述IP位址和端口,是一個通信鍊的句柄。應用程式通常通過"套接字"向網絡送出請求或者應答網絡請求。

   以J2SDK-1.3為例,Socket和ServerSocket類庫位于java.net包中。ServerSocket用于伺服器端,Socket是建立網絡連接配接時使用的。在連接配接成功時,應用程式兩端都會産生一個Socket執行個體,操作這個執行個體,完成所需的會話。對于一個網絡連接配接來說,套接字是平等的,并沒有差别,不因為在伺服器端或在用戶端而産生不同級别。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

   重要的Socket API:

   java.net.Socket繼承于java.lang.Object,有八個構造器,其方法并不多,下面介紹使用最頻繁的三個方法,其它方法大家可以見JDK-1.3文檔。

   . Accept方法用于産生"阻塞",直到接受到一個連接配接,并且傳回一個用戶端的Socket對象執行個體。"阻塞"是一個術語,它使程式運作暫時"停留"在這個地方,直到一個會話産生,然後程式繼續;通常"阻塞"是由循環産生的。

   . getInputStream方法獲得網絡連接配接輸入,同時傳回一個IutputStream對象執行個體,。

   . getOutputStream方法連接配接的另一端将得到輸入,同時傳回一個OutputStream對象執行個體。

   注意:其中getInputStream和getOutputStream方法均會産生一個IOException,它必須被捕獲,因為它們傳回的流對象,通常都會被另一個流對象使用。

   2.如何開發一個Server-Client模型的程式

   開發原理:

   伺服器,使用ServerSocket監聽指定的端口,端口可以随意指定(由于1024以下的端口通常屬于保留端口,在一些作業系統中不可以随意使用,是以建議使用大于1024的端口),等待客戶連接配接請求,客戶連接配接後,會話産生;在完成會話後,關閉連接配接。

   用戶端,使用Socket對網絡上某一個伺服器的某一個端口發出連接配接請求,一旦連接配接成功,打開會話;會話完成後,關閉Socket。用戶端不需要指定打開的端口,通常臨時的、動态的配置設定一個1024以上的端口。

   {建立伺服器}

這個程式建立了一個伺服器,它一直監聽10000端口,等待使用者連接配接。在建立連接配接後給用戶端傳回一段資訊,然後結束會話。這個程式一次隻能接受一個客戶連接配接。

{建立用戶端}

這個用戶端連接配接到位址為xxx.xxx.xxx.xxx的伺服器,端口為10000,并從鍵盤輸入一行資訊,發送到伺服器,然後接受伺服器的傳回資訊,最後結束會話。 第二步 多個客戶同時連接配接

   在實際的網絡環境裡,同一時間隻對一個使用者服務是不可行的。一個優秀的網絡服務程式除了能處理使用者的輸入資訊,還必須能夠同時響應多個用戶端的連接配接請求。在java中,實作以上功能特點是非常容易的。

   設計原理:

   主程式監聽一端口,等待客戶接入;同時構造一個線程類,準備接管會話。當一個Socket會話産生後,将這個會話交給線程處理,然後主程式繼續監聽。運用Thread類或Runnable接口來實作是不錯的辦法。

   {實作消息共享}

這個程式監聽10000端口,并将接入交給CreateServerThread線程運作。CreateServerThread線程接受輸入,并将輸入回應客戶,直到客戶輸入"bye",線程結束。我們可以在createMessage方法中,對輸入進行處理,并産生結果,然後把結果傳回給客戶。 第三步 實作資訊共享:在Socket上的實時交流

   網絡的偉大之一也是資訊共享,Server可以主動向所有Client廣播消息,同時Client也可以向其它Client釋出消息。下面看看如何開發一個可以實時傳遞消息的程式。

設計原理:

   伺服器端接受用戶端的連接配接請求,同時啟動一個線程處理這個連接配接,線程不停的讀取用戶端輸入,然後把輸入加入隊列中,等候處理。線上程啟動的同時将線程加入隊列中,以便在需要的時候定位和取出。

   {源碼}

Java Socket 執行個體

   這就是程式運作後,多使用者登陸并且輸入資訊後的螢幕。實作了資訊的實時廣播。使用者輸入"l"就可以列出線上人員表。