官术网_书友最值得收藏!

4.1.2 用Java連接到服務器

程序清單4-1是我們的第一個網絡程序。它的作用與我們使用telnet工具是相同的,即連接到某個端口并打印出它所找到的信息。

程序清單4-1 socket/SocketTest.java

下面是這個簡單程序的幾行關鍵代碼:

第一行代碼用于打開一個套接字,它也是網絡軟件中的一個抽象概念,負責啟動該程序內部和外部之間的通信。我們將遠程地址和端口號傳遞給套接字的構造器,如果連接失敗,它將拋出一個UnknownHostException異常;如果存在其他問題,它將拋出一個IOException異常。因為UnknownHostException是IOException的一個子類,況且這只是一個示例程序,所以我們在這里僅僅捕獲超類的異常。

一旦套接字被打開,java.net.Socket類中的getInputStream方法就會返回一個InputStream對象,該對象可以像其他任何流對象一樣使用。而一旦獲取了這個流,該程序將直接把每一行打印到標準輸出。這個過程將一直持續到流發送完畢且服務器斷開連接為止。

該程序只適用于非常簡單的服務器,比如“當日時間”之類的服務。在比較復雜的網絡程序中,客戶端發送請求數據給服務器,而服務器可能在響應結束時并不立刻斷開連接。在本章的若干個示例程序中,都會看到我們是如何實現這種行為的。

Socket類非常簡單易用,因為Java庫隱藏了建立網絡連接和通過連接發送數據的復雜過程。實際上,java.net包提供的編程接口與操作文件時所使用的接口基本相同。

注意:本書所介紹的內容僅覆蓋了TCP(傳輸控制協議)網絡協議。Java平臺另外還支持UDP(用戶數據報協議)協議,該協議可以用于發送數據包(也稱為數據報),它所需付出的開銷要比TCP少得多。UDP有一個重要的缺點:數據包無需按照順序傳遞到接收應用程序,它們甚至可能在傳輸過程中全部丟失。UDP讓數據包的接收者自己負責對它們進行排序,并請求發送者重新發送那些丟失的數據包。UDP比較適合于那些可以忍受數據包丟失的應用,例如用于音頻流和視頻流的傳輸,或者用于連續測量的應用領域。

java.net.Socket 1.0

·Socket(String host,int port)

構建一個套接字,用來連接給定的主機和端口。

·InputStream getInputStream()

·OutputStream getOutputStream()

獲取可以從套接字中讀取數據的流,以及可以向套接字寫出數據的流。

主站蜘蛛池模板: 肃北| 沂源县| 平山县| 阳朔县| 屏东县| 阿荣旗| 芦溪县| 锡林郭勒盟| 鸡泽县| 二手房| 武强县| 南澳县| 尤溪县| 平凉市| 南皮县| 察雅县| 海安县| 南溪县| 丰宁| 东宁县| 黔江区| 永泰县| 五河县| 信宜市| 庆阳市| 金沙县| 勃利县| 明水县| 桐城市| 和静县| 方城县| 盐津县| 金平| 武汉市| 太湖县| 松溪县| 武清区| 舒兰市| 历史| 孟津县| 荥经县|