UNIX网络编程卷1(第三版)关于源程序编译出错问题的详细解决方法

时间:2022-12-24 20:35:08



最近开始学习网络编程,由于有Linux基础,所以选择了 UNIX网络编程卷1第三版作为主要阅读书籍,按照书上建议开始调试源程序,发现编译出错,通过查找相关网络资源,总结如下解决方法与各位朋友分享!


环境说明(应该也适用于其他Linux版本):

Linux系统 Ubuntu10.04

gcc 版本gcc –version的结果 gcc (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3


最新版本Ubuntu14.04 下载http://releases.ubuntu.com/14.04/ 


参考3中提供了 sys/event.h,sockio.h,ioccom.h等头文件下载, filio.h头文件没找到,这些文件不影响编译运行,filio.h参考了一个博客上提供的源码,见附录

 

步骤:

1.源码包下载地址:www.unpbook.com获取

2.将源码压缩包放入指定路径,如 /home/HostName/Socket/ 并解压

  tar zxvf unpv13e.tar.gz

3.   按照如下步骤操作(解压后的根目录下 README中有说明):

        ./configure

        cd lib

make

cd ../libfree/

make

cd ../libroute/ (可能因为环境不同编译有问题,如 net/if_dl.h头文件等,可忽略)

make        (由于本人按照README上的步骤并未成功,忽略几个文件夹的make


接着

cd ../intro/

make daytimetcpcli

./daytimetcpcli 127.0.0.1(提示connect error:Connection refuseddaytime服务程序没开,可通过 inetd 或者 xinetd来实现对服务连接请求的控制)

 

make daytimetcpsrv (或者 make all即所有都编译)


./daytimetcpsrv &(让服务器端后台执行,这里是借助srv程序来开启系统的daytime服务程序,如果配置好 xinetd 则不需要这一步)


./daytimetcpcli 127.0.0.1

输出结果为:

        SatApr 19 16:17:33 2014


但上述是通过 ./daytimetcpsrv & 开启了daytime 服务程序

下面是通过配置 xinetd 服务守护进程来实现 daytime的控制


root@gujinjin-desktop:/usr/include/sys# cd/etc/xinetd.d/

root@gujinjin-desktop:/etc/xinetd.d# ls

chargen daytime discard echo time

root@gujinjin-desktop:/etc/xinetd.d# vim daytime


红色标记为修改部分:

/*-------------------------------------------------------------------------------------------

service daytime

{

       disable        =no

       type           = INTERNAL

       id             = daytime-stream

       socket_type    = stream

       protocol       = tcp

       user           = root

       wait           = no

}

# This is the udp version.

service daytime

{

       disable        =no

       type           = INTERNAL

       id             = daytime-dgram

       socket_type    = dgram

       protocol       = udp

       user           = root

       wait           = yes

}

/*-------------------------------------------------------------------------------------------


重启 xinetd服务并运行客户端结果如下(红色部分):


root@gujinjin-desktop:/etc/xinetd.d#service xinetd restart

 *Stopping internet superserver xinetd                                     [ OK ]

 *Starting internet superserver xinetd                                     [ OK ]

root@gujinjin-desktop:/var/www/unpv13e/unpv13e/intro#ps

 PIDTTY         TIME CMD

 2494pts/1   00:00:00 su

 2503pts/1   00:00:00 bash

 5977pts/1   00:00:00 ps


root@gujinjin-desktop:/var/www/unpv13e/unpv13e/intro#./daytimetcpcli 127.0.0.1

19 APR 2014 19:00:00 CST



参考1提供基本解决思路:http://bbs.chinaunix.net/thread-1075480-1-1.html

参考2 xinetd安装:http://www.360doc.com/content/12/0414/10/1162697_203478247.shtml

参考3 sys/*.hhttp://www.oschina.net/code/explore/cygwin-1.7.7-1/newlib/libc/sys/linux/sys

参考4默认配置信息 http://blog.csdn.net/coolingcoding/article/details/7371131

参考5http://xingyunbaijunwei.blog.163.com/blog/static/7653806720114593218540/