原创 《Redis設計與實現》第2章 簡單動態字符串(SDS)
Redis自己構建了一種名爲簡單動態字符串(simpledynamic string, SDS)的抽象類型,並將SDS用作Redis的默認字符串表示。 Redis中,C字符串(以空字符結尾的字符數組)只會作爲字符串字面量(s
原创 《TCP/IP網絡編程》第14章 多播與廣播
本章所有示例代碼>>gtihub向大量客戶端發送相同數據時,可以使用多播技術解決。14.1 多播 多播(Multicast)方式的數據傳輸是基於UDP完成的。區別在於,UDP數據傳輸以單一目標進行,而多播數據同時傳遞到加入(註冊)特
原创 《Redis設計與實現》第6章 整數集合(intset)
整數集合(intset)是集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個集合的元素數量不多時,Redis就會使用整數集合作爲集合鍵的底層實現。 6.1 整數集合的實現 整數集合(intset)是Re
原创 《TCP/IP網絡編程》第12章 I/O複用
本章所有示例代碼>>github12.1 基於I/O複用的服務器端1. 多進程服務器端的缺點 爲了構建併發服務器,只要有客戶端連接請求就會創建新進程。這的確是實際操作系統中採用的一種方案,但並非十全十美,因爲創建進程時
原创 《TCP/IP網絡編程》第9章 套接字的多種可選項
本章所有示例代碼>>github套接字具有多種特性,這些特性可通過可選項更改。9.1 套接字可選項和I/O緩衝1. 套接字的多種可選項 由上表看出,套接字可選項是分層的。IPPROTO_IP層可選項是IP協議相關事項,I
原创 《TCP/IP網絡編程》第8章 域名(DNS)及網絡地址
本章所有示例代碼>>github8.1 域名系統 DNS(DomainName System,域名系統)是對IP地址和域名進行相互轉換的系統,其核心是DNS服務器。 域名是賦予服務器端的虛擬地址,而非實際地址。因此,需要將虛擬
原创 《TCP/IP網絡編程》第16章 關於I/O流分離的其他內容
本章所有示例代碼>>gtihub 調用fopen函數打開文件後可以與文件交換數據,因此說調用fopen函數後創建了“流”(Stream)。此處的“流”是指“數據流動”,但通常可以比喻爲“以數據收發爲目的的一種橋樑”。16.1 分離I
原创 《TCP/IP網絡編程》第15章 套接字和標準I/O
本章所有示例代碼>>gtihub15.1 標準I/O函數的優點 fopen、feof、fgets、fputs函數等。1. 標準I/O函數的兩個優點標準I/O函數具有良好的移植性(Portability)(ANSIC)標準
原创 《TCP/IP網絡編程》第10章 多進程服務器端
本章所有示例代碼>>github10.1 進程概念及應用1. 兩種類型的服務器端 按序處理客戶端請求,如果每個客戶端的平均服務時間爲0.5秒,則第100個客戶端會對服務器產生相當大的不滿。 所有連接請求的受理時間不
原创 《TCP/IP網絡編程》第13章 多種I/O函數
本章所有示例代碼>>github13.1 send & recv函數1. Linux中的send & recv函數#include <sys/socket.h> ssize_t send(int sockfd, const v
原创 《TCP/IP網絡編程》第7章 優雅地斷開套接字連接
本章所有示例代碼>>github 7.1 基於TCP的半關閉 1. 單方面斷開連接帶來的問題 Linux的close函數(Windows的closesocket函數)意味着完全斷開連接。完全斷開連接不僅指無法傳輸數
原创 《TCP/IP網絡編程》第5章 基於TCP的服務器端/客戶端(2)
5.1 回聲客戶端的完美實現1. 回聲服務器端沒有問題,只有客戶端有問題。 回聲客戶端傳輸的是字符串,而且是通過調用write函數一次性發送的,之後還調用一次read函數,期待着接收自己傳輸的字符串。2. 回
原创 《TCP/IP網絡編程》第11章 進程間通信
本章所有示例代碼>>github11.1 進程間通信的基本概念 進程間通信(InterProcess Communication,IPC)意味着兩個不同進程間可以交換數據,爲了完成這一點,操作系統中應該提供兩個進程可以同時訪問的內
原创 《TCP/IP網絡編程》第6章 基於UDP的服務器端/客戶端
本章所有示例代碼>>github6.1 理解UDP1. UDP套接字的特點 信件的例子。(無法確認對方是否收到、可能發生信件丟失) UDP在結構上比TCP更簡潔,UDP不會發送類似ACK的應答消息,也不會像SEQ那