代码改变世界

unix网络编程环境搭建

2017-05-06 22:10  forest~wow  阅读(1910)  评论(0编辑  收藏  举报

unix网络编程环境搭建

1.点击下载源代码

可以通过下列官网中的源代码目录下载最新代码:
http://www.unpbook.com/src.html

2.解压文件

  1. tar -xzvf upv13e.tar.gz 

3.上传至阿里云

本人本地已经配置好,这次实验是将环境搭建至云服务器中。

  1. scp -r unpv13e root@120.76.140.119:/root/program/unp 
  2. // -r 上传文件夹 

4.编译文件

  1. cd unpv13e 
  2. chmod a+x configure //非root用户需要赋予可执行能力 
  3. ./configure 
  4. cd lib //进入lib目录并且编译 此为编译库文件  
  5. make 
  6. cd libfree //进入libfree目录并且编译 
  7. make 

libfree编译会出现下列问题:

  1. inet_ntop.c: In function ‘inet_ntop’: 
  2. inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype 
  3. size_t size; 

  4. In file included from inet_ntop.c:27:0
  5. /usr/include/arpa/inet.h:64:20: error: prototype declaration 
  6. extern const char *inet_ntop (int __af, const void *__restrict __cp, 

  7. <builtin>: recipe for target 'inet_ntop.o' failed 
  8. 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中加入如下代码即可:(插入到所有头文件之后)

  1. #define size_t socklen_t 

此时make就能成功。

5.测试introduction实例

1.使用make命令进行测试

  1. cd intro 
  2. make daytimetcpsrv 
  3. make daytimetcpcli 
  4. //测试结果 
  5. ./daytimetcpsrv 
  6. ./daytimetcpcli 127.0.0.1 
  7. Sat May 6 21:35:10 2017 

2.使用gcc编译进行测试

  1. //拷贝libunp.a到库文件夹目录/usr/lib,便于使用-lunp命令 
  2. cp libunp.a /usr/lib 
  3. //修改头文件unp.h,并将unp.h和config.h拷贝到/usr/include 
  4. cp /lib/unp.h /usr/include 
  5. cp config.h /usr/include 
  6. //由于config.h与unp.h在同一个目录夹下 
  7. vim /usr/include/unp.h 
  8. //修改include "../config.h"成“config.h" 

编译测试代码

  1. cd ./intro  
  2. gcc daytimetcpcli.c -o daytimetcpcli -lunp 
  3. gcc daytimetcpsrv.c -o daytimetcpsrv -lunp 
  4. ./daytimetcpsrv 
  5. ./daytimetcpcli 127.0.0.1 
  6. Sat May 6 21:35:10 2017 

-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了“-static”表示寻找libworld.a静态库文件)

6.如果需要关闭服务器程序,需要使用下面方法

  1. netstat -anp |grep daytimetcpsrv //具体含义使用--help查看,找到pidnum 
  2. kill -9 pidnum