今天在温习计算机网络时,突然将我很久前买的《unix网络编程第三版卷一》拿出来看看了。放了两年了,哈哈。主要讲的套接字,之前编写android时用过socket(java),而本书全是c语言还是可以好好学习下的;然而第一个程序我就编译错误了,什么鬼!! ,还好之后,用了神奇的谷歌,发现源码下居然有readme。真是提醒我了,以后一定要注意这个文件。
源码下载地址官方地址
我直接编译遇见的问题:
#1.解压文件进入主目录
cd intro
#2.直接编译
gcc -o 1.out daytimetcpcli.c
#错误提示如下:
daytimetcpcli.c:1:17: fatal error: unp.h: No such file or directory
#include "unp.h"
^
compilation terminated.
#在../key目录下找到unp.h。继续提醒没有<sys/fiflo.h>从网上下载继续出问题。
#3.看到目录下有make文件,make一下:显示如下:
peace@peace:~/workspace/unpv13e/unpv13e/intro$ make
Makefile:1: ../Make.defines: No such file or directory
make: *** No rule to make target '../Make.defines'. Stop.
崩溃,简答的测试程序都不行。没办法,谷歌;终于找到了
解决办法:
参照主目录下readme文件执行一下命令:
注意:
1最后一个命令有改动
2前面三个命令是必须的 ./configure,cd lib ,make
3后面的cd ../libfree cd ../libroute cd ../libxti 满足条件才需要执行
./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
cd ../libxti # only if your system supports XTI
make # only if your system supports XTI
cd ../intro # build and test a basic client program
make #官方是make daytimetcpcli
终于编译成功了。内牛满面;
测试:
sudo ./daytimetcpcli 127.0.0.1
[sudo] password for peace:
connect error: Connection refused
哭晕啊
成功执行
到网上一查才发现是系统默认没打开daytime服务。
解决办法:
在intro中执行一下命令打开daytime服务
sudo ./daytimetcpsrv
由于此程序在运行中;需要另外打开终端,进入intro中测试
sudo ./daytimetcpcli 127.0.0.1
[sudo] password for peace:
Thu Jul 23 21:50:23 2015
得到正常结果;
我的失误,希望能对大家有帮助;