今天繼續探索《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...