unix网络编程环境搭建
可以通过下列官网中的源代码目录下载最新代码:
http://www.unpbook.com/src.html
2.解压文件
3.上传至阿里云
本人本地已经配置好,这次实验是将环境搭建至云服务器中。
- scp -r unpv13e root@120.76.140.119:/root/program/unp 
 
- // -r 上传文件夹 
 
4.编译文件
- cd unpv13e 
 
- chmod a+x configure  //非root用户需要赋予可执行能力 
 
- ./configure 
 
- cd lib     //进入lib目录并且编译 此为编译库文件  
 
- make 
 
- cd libfree //进入libfree目录并且编译 
 
- make 
 
libfree编译会出现下列问题:
- inet_ntop.c: In function ‘inet_ntop’: 
 
- inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype 
 
-   size_t size; 
 
-          ^ 
 
- In file included from inet_ntop.c:27:0: 
 
- /usr/include/arpa/inet.h:64:20: error: prototype declaration 
 
-  extern const char *inet_ntop (int __af, const void *__restrict __cp, 
 
-                     ^ 
 
- <builtin>: recipe for target ‘inet_ntop.o‘ failed 
 
- make: *** [inet_ntop.o] Error 1 
 
错误提示inet_ntop.c中60行声明与原型申明/usr/include/arpa/inet.h不匹配。(#include一般所在文件都在/usr/include中)
经查验,最后一个参数,在inet.h中定义socklen_t,而inet_ntop.c中定义为size_t。在inet_ntop.c中加入如下代码即可:(插入到所有头文件之后)
此时make就能成功。
5.测试introduction实例
1.使用make命令进行测试
- cd intro 
 
- make daytimetcpsrv 
 
- make daytimetcpcli 
 
- //测试结果 
 
- ./daytimetcpsrv 
 
- ./daytimetcpcli 127.0.0.1 
 
- Sat May  6 21:35:10 2017 
 
2.使用gcc编译进行测试
- //拷贝libunp.a到库文件夹目录/usr/lib,便于使用-lunp命令 
 
- cp libunp.a /usr/lib 
 
- //修改头文件unp.h,并将unp.h和config.h拷贝到/usr/include 
 
- cp /lib/unp.h /usr/include 
 
- cp config.h /usr/include 
 
- //由于config.h与unp.h在同一个目录夹下 
 
- vim /usr/include/unp.h 
 
- //修改include "../config.h"成“config.h" 
 
编译测试代码
- cd ./intro   
 
- gcc daytimetcpcli.c -o daytimetcpcli -lunp 
 
- gcc daytimetcpsrv.c -o daytimetcpsrv -lunp 
 
- ./daytimetcpsrv 
 
- ./daytimetcpcli 127.0.0.1 
 
- Sat May  6 21:35:10 2017