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

2021-06-28 17:48:54 字數 2521 閱讀 1842

今天繼續探索《unix網路程式設計》的框架。並改善上次的程式

在第一次接觸中,我將error.h標頭檔案分出,但是發現錯誤檢測和輸出大量的存在,因此歸入到common.h中。

加入了一些安全包裝函式,就是對於原函式的呼叫並進行錯誤檢查。

用新的函式改善了daytimecpcli,並學習伺服器程式daytimetcpsrv的編寫。

目錄結構如下:

各個檔案的作用為:

common.h:公共標頭檔案,包含一些常量的定義和函式的宣告以及常用標頭檔案

error.c:錯誤輸出函式的定義

wrapsock.c:socket api 的安全封裝函式的定義

wrapstdio.c:standard i/o 的安全封裝函式的定義

wrapunix.c:unix 標準api的安全封裝函式的定義

error.c見上一次的日記

下面是其它檔案的內容:

common.h:

#ifndef __our_common_hdr_h

#define __our_common_hdr_h

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

#define sa struct sockaddr

#define listenq 1024 /* 2nd argument to listen() */

int accept(int, sa *, socklen_t *);

void bind(int, const sa *, socklen_t);

void connect(int, const sa *, socklen_t);

void listen(int, int);

int socket(int, int, int);

ssize_t read(int, void *, size_t);

void write(int, void *, size_t);

void close(int);

void fputs(const char *, file *);

/* error output functions */

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

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

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

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

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

#endif

wrapsock.c:

#include "common.h"

int accept(int fd, sa *sa, socklen_t *salenptr)

return n;

}void bind(int fd, const sa *sa, socklen_t salen)

void connect(int fd, const sa *sa, socklen_t salen)

void listen(int fd, int backlog)

int socket(int family, int type, int protocol)

wrapunix.c:

#include "common.h"

ssize_t read(int fd, void *ptr, size_t nbytes)

void write(int fd, void *ptr, size_t nbytes)

void close(int fd)

wrapstdio.c

#include "common.h"

void fputs(const char *ptr, file *stream)

目前為止就是這樣了,慢慢用到的函式再回來新增。

用上這些函式後,可以簡化程式:

daytimecpcli.c:

#include "common.h"

int main(int argc, char **argv)

exit(0);

}

daytimetcpsrv.c:

#include "common.h"

#include int main(int argc, char **argv)

}

執行效果為:

Unix網路程式設計學習日記

今天開始拜讀 unix網路程式設計 找到的源 在linux下有各種問題,最後決定還是自己從頭寫比較好。從第乙個時間服務程式開始學習。今天先看一下主要的標頭檔案的作用。在common.h中 參照 unp.h 自己寫的,包含常用標頭檔案和一些常量定義,用著方便 有以下的標頭檔案 sys types.h ...

Unix 網路程式設計 2 TCP API

如上圖所示的tcp連線的基本過程。一般來說,伺服器先於客戶端執行,伺服器程式執行的基本過程是 socket 函式建立伺服器段socket。bind 函式進行埠繫結,或者不呼叫bind 函式而在呼叫listen 或者connect 函式時,核心為套介面分配乙個臨時埠。listen 函式進行監聽。acc...

網路程式設計學習日記 1

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