1. 程式人生 > >《瘋狂Java講義》學習筆記(十三)網路程式設計

《瘋狂Java講義》學習筆記(十三)網路程式設計

1、基本網路支援

  • 使用InetAddress
    Java提供了InetAddress類來代表IP地址,InetAddress下還有兩個子類:Inet4Address、Inet6Address,分別代表IPv4和IPv6地址
// 可以通過如下兩個靜態方法來獲取InetAddress例項:
getByName(String host):根據主機域名獲取
getByAddress(byte[] addr):根據原始IP獲取
// 常用API:
String getCanonicalHostNam():獲取全限定域名
String getHostAddress():返回對應的IP地址
String getHostName()
:獲取IP地址的主機名 boolean isReachable():測試是否可以到達該地址
  • 使用URLDecoder和URLEncoder
    在地址頭中如果出現中文字元,可能換轉換成類似亂碼,事實上不是亂碼,這是application/x-www.form-urlencoded MINE字串
    URLDecoder類包含一個decode(String s,String enc)靜態方法,它可以將看上去是亂碼的特殊字串轉換成腹痛字串,類似解密
    URLEncode類包含一個encode(String s,String enc)靜態方法,它可以將普通字串轉換成application/x-www.form-urlencoded MINE字串
  • URL、URLConnection和URLPermission
    URL物件代表題哦那詭異資源定位器,它是指向網際網路資源的指標;URL可以由協議名、主機、埠和資源組成:
    protocol://host:port/resourceName
    URI例項代表一個統一資源識別符,它不能定位任何資源,唯一作用就是解析;而URL則包含一個可開啟到達該資源的輸入流,可以將URL理解成URI的特例
    常用API:
String getFile():獲取該URL的資源名
String getHost():獲取該URL的主機名
String getPath():獲取該URL的路徑部分
int getPort():獲取該URL
的埠 String getProtocol():獲取該URL的協議名稱 String getQuery():獲取該URL的查詢字串部分 URLConnection openConnection():返回一個URLConnection物件,它代表了與URL所引用的遠端物件的連線 InputStream openStream():開啟與此URL的連線,並返回一個用於讀取該URL資源的InputStream

2、基於TCP協議的網路程式設計

TCP/IP通訊協議在通訊的兩端各建立一個Socket,從而在通訊的兩端之間形成網路虛擬鏈路
IP和TCP這兩個協議的功能不盡相同,也可以分開單獨使用,但它們是在同一時期作為一個協議來設計的,並且在功能上也是互補的;只有結合兩者,才能保證Internet在複雜的環境下正常執行。凡事要連線到Internet的計算機,都必須同時安裝和使用這兩個協議,因此在實際中常把這兩個協議統稱為TCP/IP協議
- 使用ServerSocket建立TCP伺服器端
Java中能接收其它通訊實體連線請求的類是ServerSocket,ServerSocket物件用於監聽來自客戶端的Socket連線,如果沒有連線,它將一直處於等待狀態。ServerSocket包含一個監聽來自客戶端連線請求的方法:

Socket accept():接收到連線請求後返回一個與客戶端Socket對應的Socket
ServerSocket(int port):用指定的埠port來建立一個ServerSocket,該埠應該有一個有效的埠整數值,065535 
ServerSocket(int port,int backlog):backlog用於改變連線佇列長度
ServerSocket(int port,int backlog,InetAddress localAddr):在機器存在多個IP地址的情況下,允許通過localAddr引數來指定將ServerSocket繫結到指定的IP地址

當ServerSocket使用完畢後,應當使用close()方法來關閉該ServerSocket
伺服器應該不斷地接收來自客戶端的所有請求,所以Java程式通常會通過迴圈不斷地呼叫ServerSocket的accept()方法

ServerSocket ss = new ServerSocket(3000);
white(true){
    Socket s = ss.accept();
}
  • 使用Socket進行通訊
Socket(InetAddress/String remoteAddress,int port):建立連線到指定遠端主機、遠端埠的Socket,該構造器沒有指定本本地地址、本地埠,預設使用本地主機的預設IP地址,預設使用系統動態分配的埠
Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):適用於本地主機有多個IP地址的情形
服務端例子:
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(3000);
        while(true){
            Socket s = ss.accept();
            PrintStream ps = new PrintStream(s.getOutputStream());
            ps.println("我是服務端!");
            ps.close();
            s.close();
        }
    }
}

客戶端例子:

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("127.0.0.1",3000);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println("來自伺服器的資料:"+line);
        br.close();
        socket.close();
    }
}

相關推薦

瘋狂Java講義學習筆記十三網路程式設計

1、基本網路支援 使用InetAddress Java提供了InetAddress類來代表IP地址,InetAddress下還有兩個子類:Inet4Address、Inet6Address,分別代表IPv4和IPv6地址 // 可以通過如下兩個靜態

如鵬網學習筆記十三EasyUI

bar -h 學習筆記 val datagrid center sheet 手機號 cti 一、EasyUI簡介   是一組基於JQuery的UI插件集合   主要作用:為JQuery對象提供新的方法,實現新的功能   可以快速創建出簡潔、友好、美觀的頁面,非常適合做

Python學習筆記十三

應該 成功 緩存 with open 文件 學習 編碼 打開 gbk 一、讀文件   file = open("文件路徑名","讀寫模式") # r :讀模式 、w :寫模式、a :追加模式   如果文件存在,則打開文件成功,如果文件不存在,則打開錯誤,會拋出一個IOEr

R語言學習筆記十三:時間序列

abs 以及 stat max 時間 aic air ror imp #生成時間序列對象 sales<-c(18,33,41,7,34,35,24,25,24,21,25,20,22,31,40,29,25,21,22,54,31,25,26,35) tsal

學習筆記十三——數據庫備份還原的知識點與註意事項

差異 並且 rom esc 每次 sel exe tor 參數 學習筆記(十三)——數據庫備份還原的知識點與註意事項 一、備份還原基本概念 1、 完整備份:完整備份因為需要備份的數據量大,所以需要在空閑時間進行,並且定期進行。 2、

day6-Python學習筆記十三redis數據庫

測試的 針對 def 時間 執行 原來 導入 style __main__ import redisr = redis.Redis(host=‘211.149.218.16‘,port=6379,password=‘123456‘,db=2)#連上redisprint(r.

Linux學習筆記十三 su 、sudo 、限制root遠程登陸

linux 中一 sudo ado type col tmp 如果 一個 一、su切換用戶su - username帶用戶環境切換用戶 su - -c "touch /tmp/123.txt" user1 以user1用戶創建/tmp/123.txt 文件 如果需要切換到

Java基礎學習筆記

animal 自定義類型 轉型 通過 PC pri 法則 lse super() 21.構造方法(續):分類: 隱式構造方法:如果在一個類中,沒有手動編寫構造方法,則系統會提供一個默認的無參的構造方法 顯式構造方法:如果在一個類中,手動編寫構造方法,則系統不會提供默認的

PHP7 學習筆記十三composer詳解一

導出 php開發 HR build osi oschina sni 區別 優秀 摘要   從拷貝第三方代碼到項目中(1994),到PEAR安裝依賴包(1999),再到Composer興起(2012),PHP社區經歷了將近20年的探索。PHP這門古老的語言,也在不斷的發展更新

Python3學習筆記十三:裝飾器

nbsp lee 一個 col false UNC for strong 直接 裝飾器就是一個閉包,它的主要作用是在不改變原函數的基礎上對原函數功能進行擴展。 我們先來寫一個簡單的函數: from time import sleep def foo(): pr

Nodejs學習筆記十三—PM2

words .com 安裝 itl 生產環境 ima 端口 什麽 clas 簡介   PM2   pm2是一個內置負載均衡的node.js應用進程管理器(也支持Windows),其它的類似功能也有不少,但是感覺pm2功能更強,更值的推薦   GitHub地址:https:/

Java暑期學習筆記2

父類 bsp cte load 同時 內部類 為什麽 定義 demo # 18/07/10 # * 1.非靜態的成員方法,既可以訪問靜態成員也可以訪問非靜態; 靜態的成員方法,只可以訪問靜態成員,不可以訪問非靜態。 * 2.在靜態方法中是沒有this關鍵字的

java暑期學習筆記4

earch acea val 註意 自動 instance sta mount gree # 2018.7.12 # * 1.StringBuffer * A:StringBuffer的構造方法: * public StringBuffer():無參構造方法

Java暑期學習筆記3

ring out 顯示 字節數 順序 作用 提示 string轉換 gbk # 2018.7.11 # * 1.匿名內部類(只針對重寫一個方法時候使用,不能向下轉型,因為沒有子類類名) * new Inter(){ public

java基礎學習總結十三Java異常處理

一、JAVA異常       異常是指不期而至的各種情況,如:檔案找不到、網路連線失敗、非法引數等。異常是一個事件,它發生在程式執行期間,干擾了正常的指令流程。Java通過API中的Throwable類的眾多子類描述各種不同的異常。因而,Java異常都是物件,是Th

javaweb學習筆記十三:JSP3

目錄 jsp(3) 1. EL表示式 2.Jsp標籤 2.1動作標籤 2.2JSTL標籤 2.3自定義標籤 3. JavaBean 4.web開發模式 jsp(3) 1. EL表示式 開發jsp的原則:儘量在jsp頁面中少寫,甚至不寫java程式碼

機器學習筆記十三:TensorFlow實戰五經典卷積神經網路: LeNet -5

1 - 引言 之前我們介紹了一下卷積神經網路的基本結構——卷積層和池化層。通過這兩個結構我們可以任意的構建各種各樣的卷積神經網路模型,不同結構的網路模型也有不同的效果。但是怎樣的神經網路模型具有比較好的效果呢? 下圖展示了CNN的發展歷程。 經過人們不斷的嘗試,誕生了許多有

python基礎教程第三版)學習筆記十三

第十三章 資料庫支援 本章討論Python資料庫API(一種連線到SQL資料庫的標準化方式),並演示如何使用這個API 來執行一些基本的SQL。 本章使用的是簡單資料庫SQLite。介紹一些SQLite資料庫知識。不要指望在本章得到多少資料庫操作的具體知識。另外本章學習很大一部分基於PEP 24

Python學習筆記十三高階變數型別--字典

1、字典的定義 dictionary(字典)是 除列表以外Python之中 最靈活的資料型別 字典同樣可以用來 儲存多個數據 通常用於儲存 描述一個物體的相關資訊   字典和列表的區別 &nbs

Python學習筆記十三高級變量類型--字典

但是 image xiaomi 無序 場景 常用 media alt 保存 1、字典的定義 dictionary(字典)是 除列表以外Python之中 最靈活的數據類型 字典同樣可以用來 存儲多個數據 通常用於存儲 描述一個物體的相關信息 字典和列表的區別