zoukankan      html  css  js  c++  java
  • 织网的日子里——第一章:TCP时间获取之客户端和服务器端程序

    环境:

    Ubuntu10.04

    g++ / gcc 4.4.3


     

    特别标注:

    有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在CSDN—— jasonque的博客上,可以到CSDN博客来阅读。


    正文:

    开始啃《UNIX网络编程:卷1》.

    看完第一章,下载本书源码,刚开始运行程序就大受打击,不是少这文件就是少那个。看到源码文件夹里面的文件和文件夹挺多的,一下子蒙了,不知从何下手,第一章的源码文件在“intro”文件夹里面,直接在终端输入“make”命令,出来就是错误。惨呀。网上找资料,好像如此白痴的问题“高手”都不愿意详谈。无奈,还是靠自己吧。

    回来看看源码文件夹,发现有一个“README”的文件,之前都没有阅读这个文件的习惯,因为很多东西的README文件,里面尽是广告或者就是一大篇看着好像不相关的内容。但这里不然,必须得小心地看看啦,能救命呀!!!!

    ------README--------

    QUICK AND DIRTY
    ===============
    
    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.

    上面说得很清楚了。在终端里,进入源码文件夹,运行命令:

    # ./configure

    如果出现权限不够,则如下修改文件权限(我比较偷懒,把所有文件都面向广大人民开放了)


    然后子运行“./congfigure”命令,设置过程如下图所示:


    然后进入“lib”文件夹,运行“make”命令:


    再进入“libfree”文件夹,运行“make”命令:

    如此,就一切准备就绪了(还有几个命令是针对其他系统环境的,在这就不说了)。


    此时,可以直接进入“intro”文件夹,直接运行“make”命令,就可以得到最终的运行文件了。

    但这里我要说一下,一路下来,我发现都让“README”给带傻了,只要有妹(make)就行,那我纯粹就是只会把妹而不会思考的“禽兽”了。

    由于只用到客户端和服务器端两个程序,也就是两个.c源码文件,那我干嘛要把所有的.c文件全都编译出来?那怎样去控制只编译这两个文件?当然,直接用gcc命令编译两个源码文件是可能的,但里面相关库连接要做修改。另外一个,如果以后要写出好程序,特别是大程序,最好是对Makefile文件有深入了解。当然,不能一口吃成个大胖子,那咱就一口一口地来。

    期间,拜读了CSDN中陈皓博主关于Makefile的系列文章《跟我一起写Makefile》,简洁易懂。之后,再回来看这个源码文件,其实经过前期不断地把妹(make),相关的库已经就绪,并且每一个分类文件夹里面也都有一个Makefile文件,打开intro文件夹里的Makefile,相当简单,把不相关的代码注释掉,留下自己感兴趣的,如下所示:

    --------------intro/Makefile------------------------

    include ../Make.defines
    
    PROGS =	daytimetcpcli daytimetcpsrv
    #daytimetcpcli1 daytimetcpcli2 daytimetcpcli3 \
    #		daytimetcpsrv daytimetcpsrv1 daytimetcpsrv2 daytimetcpsrv3 \
    #		daytimetcpcliv6 daytimetcpsrvv6 \
    #		byteorder
    
    all:	${PROGS}
    
    daytimetcpcli:	daytimetcpcli.o
    		${CC} ${CFLAGS} -o $@ daytimetcpcli.o ${LIBS}
    
    #daytimetcpcli1:	daytimetcpcli1.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpcli1.o ${LIBS}
    
    #daytimetcpcli2:	daytimetcpcli2.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpcli2.o ${LIBS}
    
    #daytimetcpcli3:	daytimetcpcli3.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpcli3.o ${LIBS}
    
    daytimetcpsrv:	daytimetcpsrv.o
    		${CC} ${CFLAGS} -o $@ daytimetcpsrv.o ${LIBS}
    
    #daytimetcpsrv1:	daytimetcpsrv1.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpsrv1.o ${LIBS}
    
    #daytimetcpsrv2:	daytimetcpsrv2.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpsrv2.o ${LIBS}
    
    #daytimetcpsrv3:	daytimetcpsrv3.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpsrv3.o ${LIBS}
    
    #daytimetcpcliv6:	daytimetcpcliv6.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpcliv6.o ${LIBS}
    
    #daytimetcpsrvv6:	daytimetcpsrvv6.o
    #		${CC} ${CFLAGS} -o $@ daytimetcpsrvv6.o ${LIBS}
    
    #byteorder:	byteorder.o
    #		${CC} ${CFLAGS} -o $@ byteorder.o ${LIBS}
    
    clean:
    		rm -f ${PROGS} ${CLEANFILES}

    保存Makefile文件之后,在终端运行make命令,就可以编译出自己需要的客户端和服务器端两个运行文件了。

    至于整个大的源码文件的Makefile文件架构,那就先别急着分析,一步一步来,至少现在修改的这些是足够使用和有价值的。跟着书走,一个一个源码分析过一遍之后,再来分析整个Makefile文件架构,那时思路就会更清晰,收获会更大。

    对于源码文件和对其的分析在这就不表了,书里面讲得很明白。直接运行程序,看看结果如何吧。

    首先运行服务器端,如下所示,运行之后会处于一个阻塞等待状态,(程序里面是一个死循环,要退出程序只能来硬的了——Ctrl+C):


    接着运行客户端获取服务器系统时间,如下所示:


    OK,第一张程序例子到此结束!

  • 相关阅读:
    metasploitable实践
    免杀技术
    SQL注入
    ARP欺骗
    使用Nmap攻击靶机和使用Wireshark进行嗅探、分析
    Nmap
    搭建网络攻防环境
    20139216网络攻防技术第七次作业
    Android代码实现求和运算
    命令行输入参数,并实现排序
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2987543.html
Copyright © 2011-2022 走看看