原创 SO_REUSEADDR用法

1、一般來說,一個端口釋放後會等待兩分鐘之後才能再被使用,SO_REUSEADDR是讓端口釋放後立即就可以被再次使用。 SO_REUSEADDR用於對TCP套接字處於TIME_WAIT狀態下的socket,纔可以重複綁定使用。se

原创 基於linux系統的CS模型實現

(一) CS模型 也就是TCP的客戶/服務器模型,我們這裏用一個簡單的回射客戶/服務器模型來進行模擬驗證。客戶發送數據,服務器接收到數據,並將數據原封不動的返回給客戶端。 (二)用到的函數 1.socket()函數 1)函數原

原创 通信信號與系統分析(一)

本篇主要分爲兩部分來闡述,分別爲:離散信號和系統,Fourier分析。 (1)離散信號與系統 離散時間信號是最常見的信號形式,對連續時間信號進行採樣可以得到離散時間信號。 A離散信號 例1 畫出x=cos2t,0<=t<=2*

原创 socket編程之併發服務器(CS模型改進2)

承接之前博客的基於linux系統的CS模型實現,這裏再修改,CS模型中的服務器是迭代服務器,每次只能服務一個客戶,我們並不希望整個服務器被一個客戶單獨長期佔用,而是希望服務多個客戶,這裏就用到了fork一個子進程來服務每個

原创 Linux多線程編程(初步)

1.Linux進程與線程 Linux進程創建一個新線程時,線程將擁有自己的棧(因爲線程有自己的局部變量),但與它的創建者共享全局變量、文件描述符、信號句柄和當前目錄狀態。 Linux通過fork創建子進程與創建線程之間是有區別的:

原创 通信信號與系統分析(四 基於simulink仿真)

Simulink是一個用來對動態系統進行建模仿真和分析的軟件包,它提供了一種圖形化的交互環境,易學易用,simulink是MATLAB下的一個軟件包,在MATLAB主頁菜單上有simulink庫的按鈕,打開simulink

原创 socket編程之解決流協議的粘包問題(二)

常見的應用層協議都是帶有可變長字段的,字段之間的分隔符用換行'\n'的比用'\0'的更常見,如HTTP協議。 可變長字段的協議用readn來讀就很不方便了,爲此我們實現一個類似於fgets的readline函數。 在readl

原创 MATLAB的S文件編寫

Part I: 所謂s函數是system Function的簡稱, 用它來寫自己的simulink模塊. s函數可以用matlab、C、C++、Fortran、Ada等語言來寫, 這兒我只介紹怎樣用matlab語言來寫吧(主要是它

原创 TCP狀態測試(CS模型改進3)

本文測試TCP的11種狀態,更深入理解CS模型。 儘管我們TCP程序很小,然而對於我們弄清客戶和服務器如何啓動,如何終止,更爲重要的是當發生某些錯誤(例如客戶主機崩潰,客戶進程崩潰,網絡連接斷開,等等)時將會發生什麼,本例十分重

原创 ubuntu安裝NS3

環境:UBUNTU16.04 64位 工具:NS3最新版NS3.25 步驟: 1 NS3安裝預先設置Ubuntu環境 sudo apt-get install gcc g++ Python python-dev su

原创 處理SIGCHLD信號(CS模型改進4)

在上篇博客提到的SIGCHLD信號就是由內核在任何一個進程終止時發給它的父進程的一個信號。那我們怎麼處理僵死進程呢? 處理僵死進程 我們顯然不願意存留僵死進程。它佔用內核空間,最終可能導致我們耗盡進程資源,無論何時我們fork子進

原创 通信信號與系統分析(二)

本篇主要介紹一下離散時間信號的基本運算。包括五部分,翻轉運算,尺度變換,週期延拓,循環移位,卷積。 (一)翻轉運算 設有序列x(n),它的翻轉序列如下: y(n)=x(-n) 注意:在翻轉過程中,序列樣值向量翻轉

原创 通信信號與系統分析(三 模擬調製)

本篇討論各種模擬調製與解調系統的性能,包括幅度調製(AM)和角度調製(包括頻率調製(FM)和相位調製(PM))。 (一 )AM信號的仿真 例 消息信號是[-3 3]均勻分佈的隨機整數,產生的時間間隔爲1/10s,用AM方

原创 socket編程之解決流協議的粘包問題(一 )

流協議和粘包 這麼說吧,TCP在傳輸數據的時候,是不區分邊界的(數據和數據之間沒有邊界),因爲是基於字節流,所以數據對TCP來說就是一大堆沒有結構區別的字節塊。那意味着什麼?意味着TCP並不能對多個數據的整體的信息進行區分(打個比

原创 CS模型之服務器進程終止

現在我們啓動我們的客戶/服務器,然後殺死服務器子進程。這是在模擬服務器進程崩潰的情況,我們可從中查看客戶將發生什麼。 (1)啓動服務器和客戶端,正常回射。 (2)找到服務器子進程ID,並kill殺死它。子進程中所有打開