Unix网络编程卷1 第一章读书笔记以及习题

1 下载源码并且配置环境

   对于想学习网络编程的同学来说,《UNIX网络编程》这书肯定是不二选择。所谓实践是检验真理的唯一标志,特别是对于编程来讲,再多的理论经验也比不过code一次。《UNIX网络编程》这本书提供连源码下载,第三版本的源码我是在 GitHub上面下载的。

但是源码归源码,下载了如果不会使用那也是瞎扯。下面简单介绍一下在本节主要介绍UNIX网络编程卷(第三版)在Ubuntu19.04的配置问题,并运行一个简单时间获取客户程序。
1.首先下载源文件,链接如下

2.将下载好的压缩文件unpv13e.tar.gz解压,解压后文件为unpv13e.

3.解压后进入源码目录,打开README文件:
 Unix网络编程卷1 第一章读书笔记以及习题_第1张图片
4.按照提示首先在命令行执行 ./configure,没有问题。

5.执行 cd lib 进入lib文件夹,执行make命令,没有问题。

6.执行 cd …/libfree进入libfree文件夹,执行make命令,会遇到以下问题:
Unix网络编程卷1 第一章读书笔记以及习题_第2张图片
错误解决办法是:进入libfree文件夹,打开inet_ntop.c,在第60行将size_t size改为socklen_t size。
Unix网络编程卷1 第一章读书笔记以及习题_第3张图片
7.再执行第6步,问题解决。

8.在命令行执行 cd …/intro/,进入intro文件夹,

执行 make daytimetcpcli,生成可执行文件后,

执行 ./daytimetcpcli 127.0.0.1 会出现以下问题:

Connection refused
运行时间获取程序,需要现在ubuntu里安装时间服务

9.执行以下命令

sudo apt-get install xinetd
sudo vi /etc/xinetd.d/daytime
将图中的两个disable的值改为no:
Unix网络编程卷1 第一章读书笔记以及习题_第4张图片
执行 service xinetd restart
10.重新执行./daytimetcpcli 127.0.0.1,结果如图
在这里插入图片描述

2 章节末习题

第三题:修改client socket(AF_INET, SOCK_STREAM, 0) AF_INET成9999.

结果:报socket error: Address family not supported by protocol family 。
经查询:AF_INET本身代表了protocol family的一个特殊标记值,如果修改成其他值,相当于一个新的protocol family,那么之后传入的address family当然不会支持了。

第四题:client增加一个计数器并打印。

int counter = 0;

while ( (n = read(sockfd, recvline, MAXLINE)) > 0) 
{
    counter++;
    recvline[n] = 0;    /* null terminate */
    if (fputs(recvline, stdout) == EOF)
        err_sys("fputs error");
}

printf("%d\n",counter);

第五题:修改server端代码,将原本完整的内容,单字节发送,并查看client端实际执行的read次数。

for (int i = 0; i < strlen(buff); ++i)
{
    Write(connfd, &(buff[i]), 1);
}

Close(connfd);

实际执行client端,每次执行read的counter都在变化。
Unix网络编程卷1 第一章读书笔记以及习题_第5张图片

你可能感兴趣的:(Unix网络编程卷1)