从今天开始学习unix网络编程,希望能够坚持下去,就先从安装源码开始吧:
1.从网上下载unix网络编程第三版的源码:unpv13e.tar.gz
2.使用tar命令解压,tar -zxvf unpv13e.tar.gz
,然后进入目录中,打开README文件,按照步骤一次执行:
./configure #
try to figure out all implementation differences
cd lib # build the basic library that all programs
need
make # use "gmake" everywhere on BSD/OS
systems
cd ../libfree # continue building the basic library
make
cd
../libroute # only if your system supports 4.4BSD style routing sockets
make # only if your system supports 4.4BSD style routing
sockets
报错:unproute.h:3:45: 致命错误: net/if_dl.h:没有那个文件或目录编译中断。
make: *** [get_rtaddrs.o] 错误 1
cd ../libxti # only if your system supports XTI
make # only if your system supports XTI
(在我的电脑上这两个make没有通过,也不要紧,看后面的注释可以看到它们对应于特定的平台才会通过,这里不影响我们编译该客户端服务器时间日期程序)
接着往下:
cd
../intro # build and test a basic client program
make
daytimetcpsrv
此时会生成 daytimetcpsrv daytimetcpsrv.o
<现在用gcc
-o daytimetcpsrv daytimetcpsrv.c编译会出错,因为还需要libunp.a,也就是使用:gcc -o daytimetcpsrv
daytimetcpsrv.c -lunp>
这一步在README文件中没有写出,需要小心。假如我们没有执行make
daytimetcpsrv,而是直接执行make daytimetcpcli,然后输入 ./daytimetcpcli
127.0.0.1 后发现报错;Connection Refused。
后来解决了这个问题,原来是因为这个版本的系统默认是不开daytime服务的,而且开启daytime服务需要有root权限,然后你会看到在相同的目录下有一个daytimetcpsrv.c文件,编译(make
daytimetcpsrv)后执行它,注意需要有root权限,即sudo ./daytimetcpsrv。它的功能就是开启本机的daytime服务,然后你再开启一个终端,执行./daytimetcpcli 127.0.0.1就ok了。
make daytimetcpcli
此时会生成 daytimetcpcli daytimetcpcli.o
3、linux现在因为安全问题,各个发行版本默认是不开daytime服务的。
第一个例子实际上是两个程序,客户端和服务端,你很有可能只运行了客户端,没有运行服务端程序。
PS:由于要打开端口,所以服务端程序需要用root权限执行,所以你可以先
sudo ./daytimetcpsrv (如果本身就是root就不需要sudo)<要打开小于1024端口的服务,要用root才能执行>
然后再开一个终端B运行 ./daytimetcpcli 127.0.0.1 就可以看到返回的时间了
A终端:alex@alex:~/unpv13e/intro$ sudo ./daytimetcpsrv
B终端:alex@alex:~/unpv13e/intro$
./a.out 127.0.0.1
Wed Jun 11 23:38:07 2014

4.完成操作之后,找到libunp.a,复制这个静态库libunp.a到/usr/lib/和/usr/lib64/中;
(ubuntu12.04 32位系统中没有/usr/lib64目录,所以只复制到了/usr/lib中)
接下来在目录中找到unp.h和config.h,在以后的代码中都要用到这两个头文件,将他们复制到/usr/include中,为了以后include方便。
将unp.h中的#include "../config.h"修改为#include "config.h"
这样我们的环境就搭建好了,但是以后编译的时候在gcc的最后加上-lunp导入静态库就可以了。