一、源代碼的下載下傳和編譯
源代碼下載下傳位址:
http://www.unpbook.com/
, 下載下傳下來得到unpv13e.tar.gz檔案,如果慢的話,筆者已經上傳到網盤:
https://pan.baidu.com/s/1nLRUfQ0T7EAcnh4p6Bs5yQ
編譯步驟:
解壓縮unpv13e.tar.gz
1
進入unpv13e檔案夾中
cd ./unpv13e
./configure //如果權限不夠可以chmod改權限
編譯lib檔案
cd lib
make //出現大量warning,忽略之
cd ../libfree
make //若出現錯誤,看後面橫線内解決辦法。無則跳過
錯誤如下:
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c::: error: argument ‘size’ doesn’t match prototype
size_t size;
此時在libfree目錄下,修改
重新make即修複錯誤。
繼續執行下面指令:
cd ../libgai
make
二、環境搭建
修改
unp.h
, 将
#include “../config.h”
修改為
#include “config.h”
,如下:
cd .. //回到主目錄
sudo vim lib/unp.h
繼續,拷貝頭檔案到include
sudo cp config.h /usr/local/include
sudo cp lib/unp.h /usr/local/include
拷貝庫檔案
sudo cp libunp.a /usr/local/lib
到此,unix網絡程式設計一書上的代碼都可以編譯了。
三、示例代碼測試
以示例intro/daytimetcpcli.c為例:
編譯daytimetcpcli.c檔案
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
運作
./daytimetcpcli 127.0.0.1
測試的時候會出現如下錯誤
connect error:Connection refused
在ubuntu系統下需要開啟daytime,可通過xinetd來實作對服務連接配接請求的控制。
沒有xinetd.d,需要安裝
sudo apt-get install xinetd
然後編輯daytime
vim /etc/xinted.d/daytime
将檔案中的兩個disable後面的yes改成no,儲存退出
重新開機xinted.d
service xinetd restart
再次測試daytimetcpcli例子,
./daytimetcpcli 127.0.0.1
得到正确的結果