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

1 下载源码并且配置环境

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

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

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

3.解压后进入源码目录,打开README文件:
 在这里插入图片描述
4.按照提示首先在命令行执行 ./configure,没有问题。

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

6.执行 cd …/libfree进入libfree文件夹,执行make命令,会遇到以下问题:
在这里插入图片描述
错误解决办法是:进入libfree文件夹,打开inet_ntop.c,在第60行将size_t size改为socklen_t size。
在这里插入图片描述
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:
在这里插入图片描述
执行 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都在变化。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1、制作ramdisk,给出主次设备号,并使用df命令显示相关信息。(20分) 要求:(1) ramdisk的大小为学号的后3位*2,单位为M; (2)对文件系统采用ext2进行格式化。 2、编写一个c程序实现下面的功能:监视一个文件,如果文件被其他进程追加了内容,就把追加的内容打印出来。(15分) (1) 假定所编辑的c程序为mytail.c,使用命令行方式将该源程序编译,目标执行程序为mytail。给出具体的编译实现过程。 (2) 假定日志文件为/usr/tmp/pppd.log,给出打印追加内容的方法。 3、设用户mali记录了在Linux系统的某些用户的月工资清单,记录在文件mylist.txt,假定文件mylist.txt的内容如下: #================================================== # 登录名 工作证号 姓名 月份 工资 奖金 补助 扣除 总额 #--------------------------------------------------- wang 2076 wangxi 01 1782 1500 300 175 3407 liang 2074 liangyu 02 1560 1400 280 90 3150 zhang 3087 zhangdi 03 1804 1218 206 213 3015 wang 2076 wangxi 03 1832 1550 230 245 3367 wang 2076 wangxi 04 1832 1450 230 245 3267 liang 2074 liangyu 05 1660 1450 230 70 3270 zhang 3087 zhangdi 06 1700 1310 283 270 3023 #================================================== 只允许用户zhang读取行首字符为#的行和与用户zhang有关的行,与其他用户有关的行对用户zhang保密。(15分) (1) 编写相应的查询query.c,给出目标文件为query的实现方法; (2) 给出设置mylist.txt文件权限为仅对文件主具有读写权限的实现命令; (3) 给出设置query文件用户ID权限实现命令; (4) 给出用户zhang执行程序query的结果。 4、使用fork,exec以及wait函数构造简单的shell解释程序。(15分) (1) 假定所编辑的c程序为myxsh.c,使用命令行方式将该源程序编译,目标执行程序为myxsh。给出具体的编译实现过程。 (2) 假定当前目录下有文件信息如下: 文件的行大小 文件名 文件的行大小 文件名 920 auther.c 146 licp.txt 127 myxsh.c 124 fus.h 160 chap1.h 152 myxse.c 46 fsme.h 164 fsme 运行myxsh程序出现提示符=>后,分析find . -name *.[ch] -exec wc -l {} ; 执行结果。 5、对/usr目录进行压缩归档,结果文件名位myusr.tar。(10分) 要求:(1)以控制台方式运行; (2)将该任务挂起,再转后台,再转前台,查看进程的状态变迁过程。 6、编写程序实现通过Windows客户端对Linux服务器端进行相关网络信息配置。(25分) 要求:(1)新修改服务器的IP 地址的构成方式:网络号为192.168.2.0,主机号为学号的后3位-150;掩码为255.255.255.0;默认网关为:网络号与服务器相同,主机号为1,DNS202.117.96.10; (2)服务器端程序以deamon程序的方式运行,监听端口为学号的后4位; (3)客服端使用VC++,以GUI 方式完成对服务器端的IP 地址、掩码、默认网关、DNS信息配置输入; (4)服务器端在接收客户端的配置信息后,使用exec 系列函数完成对IP 地址、掩码、默认网关、DNS修改,并写入相应的配置文件。结果验证:使用ifconfig检查IP地址信息配置的正确性;使用nslookup检查DNS信息的正确性。 把实现的信息结果与配置文件比较,检查其一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值