標籤:unix網路編程 環境搭建
環境搭建
在嘗試UNP書上的例子時,會因為找不到"unp.h"等問題無法編譯成功,因此在學習之前需要先搭建好編譯環境。
步驟
<1>下載 UNIX網路編程原始碼unpv13e.tar.gz
下載連結 http://download.csdn.net/detail/ymsdu2004/4906181
<2>解壓 進入該目錄後執行
./configure
再進入lib目錄下 cd lib 執行 make
此時會在上層目錄(就是剛才有configure那個目錄)產生libunp.a檔案
<3>複製libunp.a到 /usr/lib下 (以後gcc編譯就可以用 -lunp來調用該庫檔案)
<4>最後在configure目錄下找到config.h 在lib目錄下找到unp.h 複製到你寫代碼的某個檔案下即可
把unp.h中 #include "../config.h"改成#include "config.h"
測試
用戶端程式
#include"unp.h"intmain(int argc, char **argv){intsockfd, n;charrecvline[MAXLINE + 1];struct sockaddr_inservaddr;if (argc != 2)err_quit("usage: a.out <IPaddress>");if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)err_sys("socket error");bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(13);/* daytime server */if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)err_quit("inet_pton error for %s", argv[1]);if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)err_sys("connect error");while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {recvline[n] = 0;/* null terminate */if (fputs(recvline, stdout) == EOF)err_sys("fputs error");}if (n < 0)err_sys("read error");exit(0);}
伺服器程式
#include"unp.h"#include<time.h>intmain(int argc, char **argv){intlistenfd, connfd;struct sockaddr_inservaddr;charbuff[MAXLINE];time_tticks;listenfd = Socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(13);/* daytime server */Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));Listen(listenfd, LISTENQ);for ( ; ; ) {connfd = Accept(listenfd, (SA *) NULL, NULL); ticks = time(NULL); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); Write(connfd, buff, strlen(buff));Close(connfd);}}
此時目錄下有4個檔案
編譯器
查看自己的ip(因為用戶端串連伺服器需要知道伺服器,也就是你自己電腦的ip)
我測試時電腦的IP為10.206.27.149
測試結果
先執行伺服器程式
此時,伺服器處於等待 監聽狀態
再執行用戶端程式
此時返回了我電腦原生時間,實現了測試。這時我們的環境已經搭建好了。