Unix網路程式設計學習日記

2021-06-28 17:14:16 字數 2655 閱讀 3779

今天開始拜讀《unix網路程式設計》。找到的源**在linux下有各種問題,最後決定還是自己從頭寫比較好。

從第乙個時間服務程式開始學習。今天先看一下主要的標頭檔案的作用。

在common.h中(參照 unp.h 自己寫的,包含常用標頭檔案和一些常量定義,用著方便),有以下的標頭檔案:

sys/types.h 

此標頭檔案是系統型別的定義,如:int8_t int16_t int32_t int64_t等等

sys/socket.h

這是socket的介面,在其中引入bits/socket.h,其中定義了各種常量。

netinet/in.h

定義了各種位址結構體和常量。

arpa/inet.h

定義了位址轉換的函式。

其它的標頭檔案是常用標頭檔案。還有一些常數定義以及結構體的簡稱。以後會隨時新增。

在error.c和error.h中,宣告和定義了常用的錯誤輸出。

目錄結構為下圖所示:

以下是源程式:

daytimecpcli.c:

#include "common.h"

#include "error.h"

int main(int argc, char **argv)

if (n < 0)

err_sys("read error");

exit(0);

}

common.h:

#ifndef __common_h

#define __common_h

#include #include #include #include #include #include #include #include #define maxline 4096

#define sa struct sockaddr

#endif

error.h:

#ifndef __myerror_h

#define __myerror_h

#include #include void err_ret(const char *fmt, ...);

void err_sys(const char *fmt, ...);

void err_dump(const char *fmt, ...);

void err_msg(const char *fmt, ...);

void err_quit(const char *fmt, ...);

#endif

error.c:

#include /* for definition of errno */

#include /* ansi c header file */

#include "error.h"

#include "common.h"

static void err_doit(int, const char *, va_list);

void err_ret(const char *fmt, ...)

void err_sys(const char *fmt, ...)

void err_dump(const char *fmt, ...)

void err_quit(const char *fmt, ...)

void err_msg(const char *fmt, ...)

static void err_doit(int errnoflag, const char *fmt, va_list ap)

我將error.c製作成了名為liberr.a的靜態庫,為以後連線方便做準備。所以,sock目錄下的makefile內容如下:

all: liberr.a

liberr.a: liberr.o

ar rv liberr.a liberr.o

liberr.o: error.c error.h common.h

gcc error.c -c -o liberr.o

clean:

rm -rf *.o *.a

intro目錄下的makefile內容如下:

targets = daytimecpcli

cc = gcc

includes = -i"../sock/"

libs = -l"../sock/"

all: $(targets)

daytimecpcli: daytimecpcli.c ../sock/liberr.a

$(cc) -o daytimecpcli daytimecpcli.c $(libs) -lerr $(includes)

../sock/liberr.a: ../sock/error.c ../sock/error.h ../sock/common.h

cd ../sock && make

clean:

rm -rf $(targets) *.o

在開啟書上的程式daytimetcpsrv時,程式執行效果如下:

Unix網路程式設計學習日記 2

今天繼續探索 unix網路程式設計 的框架。並改善上次的程式 在第一次接觸中,我將error.h標頭檔案分出,但是發現錯誤檢測和輸出大量的存在,因此歸入到common.h中。加入了一些安全包裝函式,就是對於原函式的呼叫並進行錯誤檢查。用新的函式改善了daytimecpcli,並學習伺服器程式dayt...

網路程式設計學習日記 1

很多函式都是用的winpcap的,所以我又抓緊時間看winpcap的入門知識。裡面有開發者包developer s pack和普通使用的安裝程式,寬頻上網助手就是普通的安裝包,而開發要使用的則是developer s pack。下來之後,安裝到某個目錄,然後配置vc,把那個目錄的include和li...

UNIX網路程式設計學習 五 UDP程式設計

udp相比tcp是無連線的。它收發資料是通過recvfrom和sendto兩個函式。它們的原型如下 ssize t recvfrom int sockfd,void buff,size t nbytes,int flags,struct sockaddr from,socklen t addrlen...