您的位置:首页 > 理论基础 > 计算机网络

Unix网络编程:从入门到放弃——一个简单的时间获取程序

2017-04-03 16:56 197 查看
《Unix网络编程》两卷备受赞誉,另外四本传世经典《TCP/IP详解》(3卷)和《Unix环境高级编程》更是让W.Richard Stevens如同神一般的存在。最近入手了其中两本《Unix网络编程》准备开启网络编程的学习之旅。

书本配套源码地址:http://www.unpbook.com/src.html

编译环境:Ubuntu16.04-64

首先解压源文件,打开主文件夹下README文件,上面有源代码编译步骤。

===============

Execute the following from the src/ directory:

./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 daytimetcpcli
./daytimetcpcli 127.0.0.1

If all that works, you're all set to start compiling individual programs.

Notice that all the source code assumes tabs every 4 columns, not 8.

MORE DETAILS
============

在终端用tree -L 1看一下源码的结构:

.
├── aclocal.m4
├── advio
├── bcast
├── config.guess
├── config.h
├── config.h.in
├── config.log
├── config.status
├── config.sub
├── configure
├── configure.in
├── debug
├── DISCLAIMER
├── icmpd
├── inetd
├── install-sh
├── intro
├── ioctl
├── ipopts
├── key
├── lib
├── libfree
├── libgai
├── libroute
├── libunp.a
├── Make.defines
├── Make.defines.in
├── Makefile
├── Makefile.in
├── mcast
├── mysdr
├── names
├── nonblock
├── oob
├── ping
├── README
├── route
├── rtt
├── sctp
├── select
├── server
├── sigio
├── sock
├── sockopt
├── sparc64-unknown-freebsd5.1
├── ssntp
├── streams
├── tcpcliserv
├── test
├── threads
├── traceroute
├── udpcksum
├── udpcliserv
├── unixdomain
└── VERSION

首先执行./configure进行整体配置,再进入lib目录执行make命令即可,中间的三步分别进入libfree/libroute/libxti执行make可以省略,最后进入intro文件夹执行make daytimetcpcli命令,若直接执行./daytimetcpcli 127.0.0.1会出现:

connect error: Connection refused的错误。因为linux系统默认关闭daytime服务,所以需要手动开启。

再次用tree命令查看intro文件夹文件结构:

.
├── byteorder
├── byteorder.c
├── byteorder.o
├── daytimetcpcli
├── daytimetcpcli1
├── daytimetcpcli1.c
├── daytimetcpcli1.o
├── daytimetcpcli2
├── daytimetcpcli2.c
├── daytimetcpcli2.o
├── daytimetcpcli3
├── daytimetcpcli3.c
├── daytimetcpcli3.o
├── daytimetcpcli.c
├── daytimetcpcli.o
├── daytimetcpcliv6
├── daytimetcpcliv6.c
├── daytimetcpcliv6.o
├── daytimetcpsrv
├── daytimetcpsrv1
├── daytimetcpsrv1.c
├── daytimetcpsrv1.o
├── daytimetcpsrv2
├── daytimetcpsrv2.c
├── daytimetcpsrv2.o
├── daytimetcpsrv3
├── daytimetcpsrv3.c
├── daytimetcpsrv3.o
├── daytimetcpsrv.c
├── daytimetcpsrv.lc
├── daytimetcpsrv.o
├── daytimetcpsrvv6
├── daytimetcpsrvv6.c
├── daytimetcpsrvv6.o
├── Makefile
├── truss.solaris.2.6
└── truss.unixware.2.1


在intro文件夹下重现开启一个终端,执行sudo ./daytimetcpsrv即可打开daytime服务。
此时,在原终端再次执行./daytimetcpcli 127.0.0.1,可以返回系统当前时间:

Mon Apr  3 16:52:13 2017
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: