原创 遠程訪問服務器目錄

1、設計 三個需要: (1).協議 (2)客戶端程序 (3)服務器端程序 2、協議 協議包含有請求和應答。首先,客戶端發送一行包含有目錄名稱的請求。服務器讀取該目錄名之後打開並讀取該目錄,然後把文件列表發送到客戶端。客

原创 socket和TCP/IP協議族的關係

數據鏈路層、網絡層、傳輸層協議是在內核中實現的,因此操作系統需要實現一組系統調用,使得應用程序能夠訪問這些協議提供的服務,實現這組系統調用的API有socket,socket與TCP/IP協議族的關係: 由socket定義的

原创 基於數據報 (Datagram) 的編程:(UDP)

軟件控制 程序的運行需要內存、 CPU 和一些系統資源。操作系統關心這類事情,但是一些程序還需要關心另一件事情:就是程序擁有者的允許。 從合法性的角度講,需要有一個許可證來保證程序的合法運行,但是有些許可證卻是帶有限制的。

原创 centos 下編譯licode

原生licode只支持ubuntu,而自己經常使用centos因此想要在cent下編譯licode。寫篇博客記錄下遇到的問題。 期間也查看了搜索了各種帖子以及博客發現,大家在centos下編譯碰到的問題都不全一樣,想來也可以理解,

原创 daemon的用法

#include <unistd.h> int daemon(int nochdir, int noclose); daemon()函數適用於希望從控制終端脫離並作爲系統守護進程在後臺運行的程序。 如果nochdir爲零,

原创 STL list::sort()

template <class T, class Alloc> template <class T, class Alloc> void list<T, Alloc>::sort() { if (node->next == nod

原创 wireshake分析stun協議

不知道爲什麼,我用wireshake過濾stun協議過濾不出來,抓包發現解析出來的和3478端口交互的都是udp的數據,弄個半天沒弄好,想着udp就udp吧,反正是爲了學習,順道寫篇博客記錄一下。 過濾掉UDP包頭後,前兩位是0,

原创 學習線程

線程認識: 首先 Linux 並不存在真正的線程,Linux 的線程是使用進程模擬的。 進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進 程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是

原创 I/O重定向

文件描述符:一個數組的索引號,每個進程都有其打開的一組文件,這些打開的文件被保持在一個數組中,文件描述符即爲某文件在此數組中的索引號。 最低文件描述符:當打開文件時,爲此文件安排的描述符總是此數組中最低可用位置的索引。 三種將標準輸入定位

原创 客戶/服務器模型(二):模塊化

基於 socket 的客戶/服務器系統大多是類似的。雖然電子郵件、文件傳輸、遠程登錄和分佈式數據庫,以及其他的 Internet 服務在屏幕上顯示的內容相異,但是它們的運作原理是一致的。一旦理解了一個 socket 流的客戶/服務

原创 管道 的實現

匿名管道: 調用 pip e 來創建管道並將其兩端連接到兩個文件描述符 。 pepefd[0] 爲讀數據端的文件描述符,而 pipefd[1] 則爲寫數據端的文件描述符 。 像一個打開的文件的內部情況一樣,管道的內部實現隱藏在內核中,進

原创 epoll

epoll API執行一個類似的任務來poll:監視多個文件描述符來查看是否有任何I / O是可能的。 epoll API既可以用作edge-triggered的接口,也可以用作Level-triggered 的接口,並可以很好地

原创 Linux下訪問DNS服務

要訪問DNS服務,就必須先知道DNS服務器的IP地址。Linux使用/etc/resolve.conf文件來存放DNS服務器的IP地址。 其中註釋的意思是: 由resolvconf生成的glibc resolver的動態re

原创 IP路由

IP協議的一個核心任務是數據報的路由, 即決定發送數據報到目標機器的路徑。 IP模塊基本工作流程: 當IP模塊接收到來自數據鏈路層的IP數據報時,它首先對該數據報的頭部做CRC校驗,確認無誤之後分析其頭部的具體信息。

原创 服務器和Socket

4 種類型的數據源 1.磁盤文件 2. 設備 3. 管道 4. Sockets (1,2) 磁盤 / 設備文件 用 open 命令連接,用 read 和 write 傳遞