You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
# 期中大作业丨动手编写一个自己的程序吧!
|
|
|
|
|
|
|
|
|
|
你好,我们之前已经学习了网络编程的基础篇和提高篇。经过近两个月的学习,不知道你对这些内容的掌握程度如何呢?
|
|
|
|
|
|
|
|
|
|
我之前说过,网络编程是一个既重视理论,又重视实战的内容模块。一味地消化理论并不足以让你掌握网络编程,只有自己亲自动手写代码,编写程序,才能对TCP、UDP、套接字这些内容有更深切的体会,才能切实感受到它们是如何帮助我们的程序进行互联互通的。
|
|
|
|
|
|
|
|
|
|
网络编程就像一个魔法棒,我们之前已经学习了一些“咒语”,但上手操纵才能真实地施展魔法。所以我在专栏中安排了一个期中作业,借由这个作业让你上手编写代码,相信你在这个过程中也会更有成就感。
|
|
|
|
|
|
|
|
|
|
我在这里再提供一些“咒语”提示,方便你回顾之前的内容,以便在解题的时候更加胸有成竹。
|
|
|
|
|
|
|
|
|
|
客户端程序可以以[第11篇文章](https://time.geekbang.org/column/article/126126)的程序例子为原型,这里主要考察使用select多路复用,一方面从标准输入接收字节流,另一方面通过套接字读写,以及使用shutdown关闭半连接的能力。
|
|
|
|
|
|
|
|
|
|
服务器端程序则考察套接字读写的能力,以及对端连接关闭情况下的异常处理等能力。
|
|
|
|
|
|
|
|
|
|
题目不难,相信你可以做好。
|
|
|
|
|
|
|
|
|
|
## 题干
|
|
|
|
|
|
|
|
|
|
请你分别写一个客户端程序和服务器程序,客户端程序连接上服务器之后,通过敲命令和服务器进行交互,支持的交互命令包括:
|
|
|
|
|
|
|
|
|
|
* pwd:显示服务器应用程序启动时的当前路径。
|
|
|
|
|
* cd:改变服务器应用程序的当前路径。
|
|
|
|
|
* ls:显示服务器应用程序当前路径下的文件列表。
|
|
|
|
|
* quit:客户端进程退出,但是服务器端不能退出,第二个客户可以再次连接上服务器端。
|
|
|
|
|
|
|
|
|
|
## 客户端程序要求
|
|
|
|
|
|
|
|
|
|
1. 可以指定待连接的服务器端IP地址和端口。
|
|
|
|
|
2. 在输入一个命令之后,回车结束,之后等待服务器端将执行结果返回,客户端程序需要将结果显示在屏幕上。
|
|
|
|
|
3. 样例输出如下所示。
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
第一次连接服务器
|
|
|
|
|
$./telnet-client 127.0.0.1 43211
|
|
|
|
|
pwd
|
|
|
|
|
/home/vagrant/shared/Code/network/yolanda/build/bin
|
|
|
|
|
cd ..
|
|
|
|
|
pwd
|
|
|
|
|
/home/vagrant/shared/Code/network/yolanda/build
|
|
|
|
|
cd ..
|
|
|
|
|
pwd
|
|
|
|
|
/home/vagrant/shared/Code/network/yolanda
|
|
|
|
|
ls
|
|
|
|
|
build
|
|
|
|
|
chap-11
|
|
|
|
|
chap-12
|
|
|
|
|
chap-13
|
|
|
|
|
chap-14
|
|
|
|
|
chap-15
|
|
|
|
|
chap-16
|
|
|
|
|
chap-17
|
|
|
|
|
chap-18
|
|
|
|
|
chap-20
|
|
|
|
|
chap-21
|
|
|
|
|
chap-22
|
|
|
|
|
chap-23
|
|
|
|
|
chap-25
|
|
|
|
|
chap-26
|
|
|
|
|
chap-27
|
|
|
|
|
chap-28
|
|
|
|
|
chap-4
|
|
|
|
|
chap-5
|
|
|
|
|
chap-6
|
|
|
|
|
chap-7
|
|
|
|
|
clean.sh
|
|
|
|
|
cmake-build-debug
|
|
|
|
|
CMakeLists.txt
|
|
|
|
|
lib
|
|
|
|
|
mid-homework
|
|
|
|
|
README.md
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cd -
|
|
|
|
|
pwd
|
|
|
|
|
/home/vagrant/shared/Code/network/yolanda
|
|
|
|
|
cd /home
|
|
|
|
|
pwd
|
|
|
|
|
/home
|
|
|
|
|
ls
|
|
|
|
|
ubuntu
|
|
|
|
|
vagrant
|
|
|
|
|
quit
|
|
|
|
|
|
|
|
|
|
//再次连接服务器
|
|
|
|
|
$./telnet-client 127.0.0.1 43211
|
|
|
|
|
pwd
|
|
|
|
|
/home/vagrant/shared/Code/network/yolanda/build
|
|
|
|
|
ls
|
|
|
|
|
bin
|
|
|
|
|
chap-11
|
|
|
|
|
chap-12
|
|
|
|
|
chap-13
|
|
|
|
|
chap-15
|
|
|
|
|
chap-16
|
|
|
|
|
chap-17
|
|
|
|
|
chap-18
|
|
|
|
|
chap-20
|
|
|
|
|
chap-21
|
|
|
|
|
chap-22
|
|
|
|
|
chap-23
|
|
|
|
|
chap-25
|
|
|
|
|
chap-26
|
|
|
|
|
chap-28
|
|
|
|
|
chap-4
|
|
|
|
|
chap-5
|
|
|
|
|
chap-6
|
|
|
|
|
chap-7
|
|
|
|
|
CMakeCache.txt
|
|
|
|
|
CMakeFiles
|
|
|
|
|
cmake_install.cmake
|
|
|
|
|
lib
|
|
|
|
|
Makefile
|
|
|
|
|
mid-homework
|
|
|
|
|
|
|
|
|
|
quit
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 服务器程序要求
|
|
|
|
|
|
|
|
|
|
1. 暂时不需要考虑多个客户并发连接的情形,只考虑每次服务一个客户连接。
|
|
|
|
|
2. 要把命令执行的结果返回给已连接的客户端。
|
|
|
|
|
3. 服务器端不能因为客户端退出就直接退出。
|
|
|
|
|
|
|
|
|
|
你可以把自己编写的程序代码放到GitHub上,并在评论里留下链接。我会认真查看这些代码,并在周五给出自己的反馈意见以及题目分析。由于时间有限,无法尽数查看,后续我会以答疑或者加餐的形式再做补充。
|
|
|
|
|
|
|
|
|
|
期待你的成果!
|
|
|
|
|
|