TCP/IP常見問題總結(四)
15. C/S模式下使用socket通訊,幾個關鍵函式
客戶端的Java程式碼如下所示:
建立連線後,獲取輸入輸出流進行對應的輸入輸出即可。 伺服器的Java程式碼如下所示:public class Main { public static void main(String[] args) throws Exception { String host = ""; int port = 0; Socket socket = new Socket(host, port); // 分別填入目標主機ip和埠 try { // 獲取輸出流 OutputStream os = socket.getOutputStream(); // 獲取輸入流 InputStream is = socket.getInputStream(); } finally { // 關閉socket socket.close(); } } }
通過accept獲取一個socket連線後類似客戶端獲取輸入輸出處理即可。public class Main { public static void main(String[] args) throws Exception { int port = 0; ServerSocket serverSocket = new ServerSocket(port); // 填入監聽的埠號 try { // accept是一個阻塞的方法,阻塞直到返回一個socket連線 Socket socket = serverSocket.accept(); try { // 獲取輸入輸出流進行對應操作 } finally { socket.close(); } } finally { serverSocket.close(); } } }
客戶端Java NIO程式碼:
注意NIO下的連線、讀取和寫入操作均為非阻塞操作,可能並沒有達到我們預料中的結果就返回了,因此切記在迴圈中使用並進行相應的判斷。public class Main { public static void main(String[] args) throws Exception { String hostname = ""; int port = 0; SocketChannel socketChannel = SocketChannel.open(); // 設定成非阻塞IO socketChannel.configureBlocking(false); try { // 非阻塞模式下可能沒建立連線就返回了 while (!socketChannel.finishConnect()) { // 傳入目標主機ip和埠號建立連線 socketChannel.connect(new InetSocketAddress(hostname, port)); } int capacity = 48; // 傳入緩衝區大小建立緩衝區 ByteBuffer buffer = ByteBuffer.allocate(capacity); // 讀取位元組輸入 int byteRead = socketChannel.read(buffer); } finally { socketChannel.close(); } } }
伺服器Java NIO程式碼:
public class Main {
public static void main(String[] args) throws Exception {
int port = 0;
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
// 繫結監聽埠
serverSocketChannel.bind(new InetSocketAddress(port));
// 設定為非阻塞模式
serverSocketChannel.configureBlocking(false);
try {
while (true) {
SocketChannel socketChannel = serverSocketChannel.accept();
// 非阻塞模式下可能沒監聽到任何通道就返回了
if (socketChannel != null) {
// 獲取socket通道後進行對應操作
}
}
} finally {
serverSocketChannel.close();
}
}
}
由於非阻塞的原因,accept方法不一定成功獲取socketChannel,因此我們需要進行判斷是否返回了null。16. IP地址分類
IP地址分為IPv4地址(32位)和IPv6地址(128位),在此我們討論IPv4地址。
IP地址由兩部分(網路部分和主機部分)組成,可以分為有類網和無類網兩類。
有類網
有類網分為以下5種:- A類網:第一位為0,後7位為網路號,剩餘24位為主機號
- B類網:前兩位為10,後14位為網路號,剩餘16位為主機號
- C類網:前三位為110,後21位為網路號,剩餘8位為主機號
- D類網(不可用):前四位為1110,後28位為多播地址
- E類網(不可用):前四位為1111,被保留
無類網
無類網加入了子網掩碼的概念。子網掩碼是一個32位地址,用於將某個IP地址劃分成網路地址和主機地址兩部分。在子網掩碼中我們以1表示為網路號,例:255.255.255.0表示前24位為網路號。17. 路由器與交換機區別
路由器工作於網路模型的網路層,其主要的功能是路由選擇與儲存轉發,路由器上還能開啟ACL訪問控制列表、NAT地址轉換等功能,擴充套件網路應用。
交換機工作於網路模型的資料鏈路層,其主要的功能是泛洪、儲存轉發、過濾和自學習,交換機還能夠隔離衝突域,並劃分VLAN。
相關推薦
TCP/IP詳解(四)---ICMP:Internet控制報文協議
基本概念 ICMP(Internet Control Message Protocol,網路控制報文協議),屬於OSI七層模型中的網路層,與IP/UDP同屬一層,可以將其看成IP、UDP協議功能的一個補充,因為以前說過,IP協議是不可靠的,其可靠性需藉
TCP/IP常見問題總結(四)
15. C/S模式下使用socket通訊,幾個關鍵函式 客戶端的Java程式碼如下所示: public class Main { public static void main(String[]
TCP/IP五層(四層)模型——應用層
應用層 應用層是TCP/IP五層(四層)模型的最頂層,主要負責程式間的溝通,如簡單電子郵件傳輸(SMTP),檔案傳輸協議(FTP),網路遠端訪問協議(Telnet)等,網路程式設計主要就是針對應用層 HTTP協議——超文字傳輸協議 1 HTTP協議
分散式系統常見問題總結(四)- 應用間通訊
分散式系統間通訊的常見方式有兩種,一種是訊息通訊,比如JMS,RocketMQ等,一種是RPC遠端呼叫。我們先來看一下通訊的基礎知識,然後主要來看一下RPC遠端呼叫,訊息通訊大家可以參考我的下一篇文章
TCP/IP四層協議模型與ISO七層模型(TCP/IP系統學習(2))
首先我們應該瞭解到,像TCP/IP這樣的協議系統必須負責完成以下任務: 1. 把訊息分解為可管理的資料塊,並且這些資料塊能夠有效的通過傳輸介質。 2. 與網路介面卡硬體連線。 3. 定址,即傳送端計算機必須能夠定位到接收資料的計算機,接收計算機必須能夠識別
xml布局內容總結(四)--Android
odi utf lns data- state 常常 使用 查看 andro (1)對於xml編寫界面較復雜的情況下,使用include會使得編寫和查看更清楚 <LinearLayout android:layout_width=&
權限項目總結(四) shiro 授權
oge als 註解 沒有 概述 當前 http ade ava 概述 Authorization(授權):不難理解,授權就是用來控制當前訪問用戶在訪問系統資源權限。 這個詞也做證書的解釋,從證書這個角度來講,推斷是否擁有對資源訪問的權限時。當前用戶
Linux常見命令(四)——mkdir
image 訪問 找不到 direct 微軟 頁面 key 學習 -1 今天我們來介紹第四個命令:mkdir。mkdir (Make Directory 創建目錄): 若指定目錄不存在則創建目錄。在創建目錄時,要求創建目錄的用戶具有寫權限,並應保證新建的目錄沒有重名
I/O操做總結(四))
zab 方法 字符 add i/o spa 我們 ppr bsp 前面已經把java io的主要操作講完了 這一節我們來說說關於java io的其他內容 Serializable序列化 實例1:對象的序列化 1 2 3 4 5 6 7 8 9 10 11
JAVA學習總結(四)
服務 共同點 運行 blog 重要 程序員 ride 處理 mob 1.接口 interface 1.1語法: 修飾符 interface 接口名{ 常量 都是抽象方法 } 修飾符:默認 | public接口名:自定義,規則與類名相同,一般I字母打頭:
linux基礎知識總結(四)
基礎知識第四周學習總結 目錄 一.知識脈絡圖二.軟件包管理三.磁盤管理 一.知識脈絡圖 二.軟件包管理 1.軟件組成 二進制應用程序的組成部分: 二進制文件,庫文件,配置文件,幫助文件 庫文件: 庫文件是一個很特殊的存在,他對於很多程序起著支持作用,如果不小心
JavaSE學習總結(四)——Java面向對象十分鐘入門
組織 table 運行時 order 3.1 project park 得到 row 目錄 一、理解類與對象及他們間的關系 1.1、對象 1.3、類與對象間的關系 二、了解面向對象編程的意義 三、定義類與實例化對象 3.1、定義類 3.2、實例化對象 四、區別
JVM調優總結(四)-分代垃圾回收詳述
web服務器 mar you 數量 不變 all 時間 lis 完成 為什麽要分代 分代的垃圾回收策略,是基於這樣一個事實:不同的對象的生命周期是不一樣的。因此,不同生命周期的對象可以采取不同的收集方式,以便提高回收效率。 在Java程序運行的過程中,會
運維工作中經常用到的一些知識總結(四)
Lftp SLA yourls Tomcat多實例 接上篇:http://blog.51cto.com/bobo365/2125159 54、rabbitMQ http://blog.csdn.net/lishaojun0115/article/details/53152255 用戶管理 用戶
OO學習總結(四)
string 質量 人員 其他 png ext 內部 支持 分支 一、 測試與正確性論證的比較 測試和正確性論證分別從用戶角度和開發者角度對工程進行評估。前者能夠評測程序在一般情況和可預見的特殊情況下的執行效果,後者能夠較為全面地測試到每一個細節。 測試的優點: 所需時間
AlwaysOn業務IP和高可用IP分開使用(四)
shadow 使用 ext ges src align proc 方案 win 方案三:主備源IP用於AG通信、主備新增IP綁定到源網卡用於業務訪問測試環境描述:AG角色主機名網絡適配器IP地址1IP地址2主庫TEST-GS-ZHXT1Ethernet010.198.197
SpringCloud開發學習總結(四)—— 客戶端負載均衡Ribbon
均衡 spring java www ref discovery 聯合 方式 嘗試 通過上一章《SpringCloud開發學習總結(三)—— 服務治理Eureka》,我們已經搭建起微服務架構中的核心組件——服務註冊中心(包括單點模式和高可用模式)。同時還註冊了一個服務,
TCP協議學習總結(中)
性能 bsp 復雜 完美 設置 通告 數據回顯 實時推送 實時性 很多人都說TCP協議是一個十分復雜的協議,在學習當中,我對協議每一個問題都分解學習後,每一個分解我都能體會和理解它的要點,並不難理解。但我把這些拆分的細節合並後,確認感覺這樣一個協議相對“臃腫”但又好像不得不
TCP協議學習總結(下)
out 窗口 我們 中間 strong 以及 簡單 就是 bsp 在前兩邊TCP學習總結中,也大概地學習了TCP的整個流程,但許多細節中的細節並沒有詳細學習,例如超時重傳問題,每次瓶頸回歸慢啟動效率問題以及最大窗口限制問題等。本學習篇章最要針對這些細節中的細節進行學習。TC
TCP/IP學習筆記(2)-數據鏈路層
方案 網絡 n) 以及 設備 ima img 控制 不同的 數據鏈路層有三個目的: 為IP模塊發送和接收IP數據報。 為ARP模塊發送ARP請求和接收ARP應答。 為RARP發送RARP請求和接收RARP應答 ip大家都聽說過。至於ARP和RARP,ARP叫