网络编程实战
盛延敏
前大众点评云平台首席架构师
44207 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
网络编程实战
15
15
1.0x
00:00/01:24
登录|注册

期中大作业丨动手编写一个自己的程序吧!

讲述:盛延敏大小:1.28M时长:01:24
quit
ls
cd
pwd
反馈意见和题目分析
GitHub上的程序代码
服务器端持续运行
返回命令执行结果
单个客户连接
交互命令
指定服务器端IP地址和端口
期望成果
服务器程序
客户端程序
select多路复用
套接字
UDP
TCP
自己动手写代码
理论与实战
网络编程的掌握程度
网络编程提高篇
网络编程基础篇
期中大作业丨动手编写一个自己的程序吧!
参考文章

该思维导图由 AI 生成,仅供参考

你好,我们之前已经学习了网络编程的基础篇和提高篇。经过近两个月的学习,不知道你对这些内容的掌握程度如何呢?
我之前说过,网络编程是一个既重视理论,又重视实战的内容模块。一味地消化理论并不足以让你掌握网络编程,只有自己亲自动手写代码,编写程序,才能对 TCP、UDP、套接字这些内容有更深切的体会,才能切实感受到它们是如何帮助我们的程序进行互联互通的。
网络编程就像一个魔法棒,我们之前已经学习了一些“咒语”,但上手操纵才能真实地施展魔法。所以我在专栏中安排了一个期中作业,借由这个作业让你上手编写代码,相信你在这个过程中也会更有成就感。
我在这里再提供一些“咒语”提示,方便你回顾之前的内容,以便在解题的时候更加胸有成竹。
客户端程序可以以第 11 篇文章的程序例子为原型,这里主要考察使用 select 多路复用,一方面从标准输入接收字节流,另一方面通过套接字读写,以及使用 shutdown 关闭半连接的能力。
服务器端程序则考察套接字读写的能力,以及对端连接关闭情况下的异常处理等能力。
题目不难,相信你可以做好。

题干

请你分别写一个客户端程序和服务器程序,客户端程序连接上服务器之后,通过敲命令和服务器进行交互,支持的交互命令包括:
pwd:显示服务器应用程序启动时的当前路径。
cd:改变服务器应用程序的当前路径。
ls:显示服务器应用程序当前路径下的文件列表。
quit:客户端进程退出,但是服务器端不能退出,第二个客户可以再次连接上服务器端。

客户端程序要求

可以指定待连接的服务器端 IP 地址和端口。
在输入一个命令之后,回车结束,之后等待服务器端将执行结果返回,客户端程序需要将结果显示在屏幕上。
样例输出如下所示。
第一次连接服务器
$./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

服务器程序要求

暂时不需要考虑多个客户并发连接的情形,只考虑每次服务一个客户连接。
要把命令执行的结果返回给已连接的客户端。
服务器端不能因为客户端退出就直接退出。
你可以把自己编写的程序代码放到 GitHub 上,并在评论里留下链接。我会认真查看这些代码,并在周五给出自己的反馈意见以及题目分析。由于时间有限,无法尽数查看,后续我会以答疑或者加餐的形式再做补充。
期待你的成果!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习网络编程基础和提高后,现在是时候动手编写自己的程序了!本文提出了一个期中大作业,要求读者分别编写客户端程序和服务器程序,实现通过命令与服务器进行交互的功能。客户端程序需要支持命令输入和服务器交互,并提供样例输出。服务器程序则需要处理客户端连接和命令执行结果返回。这个作业旨在让读者通过实际编写代码来加深对TCP、UDP、套接字等内容的理解,提升实战能力。通过完成这个作业,读者将更有成就感,同时也能够得到专栏作者的反馈意见和题目分析。期待读者的成果!

2019-09-1611人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 传说中的成大大
    https://github.com/xiecheng1991/network-practise-code-by-myself/tree/master/mid_test 实现了如下功能 1. 自定义协议用于服务器端发送到客户端过后是否有需要打印的内容如ls和pwd的返回 2. 设置了心跳检测 如果客户端一定时间不发消息过后 服务器会断开它的连接并且退出,退出的原因在于因为只有一个客户端的连接 所以如果不退出会重复的select超时 3. 设置了重用so_reuseaddr 避免time_wait状态 4. 实现了ls命令 5. 实现了pwd命令 代码缺陷如下 1. 未完整的实现cd命令确实理解不到 2. 因为只能实现1对1的服务器客户端逻辑 所以很多地方写的不全面 今天晚上花了三个多小时把代码写好 并且通过gdb调试完成

    作者回复: 写得不错,精神可嘉

    2019-09-17
    10
  • 沉淀的梦想
    https://github.com/DQinYuan/homework-telnet-test 我主要是写Java的,没怎么写过C,边百度边写好不容易写出一版,代码可能比较简陋,老师不要嫌弃

    作者回复: 写的挺好的呀

    2019-09-19
    3
  • Steiner
    第一次写这种比较大的交互程序,用c语言写了几次,感觉一堆东西都写在一起太难维护了,于是用c++做了点类设计.发现的程序bug太多了,目前打算简单的交互以下,服务端一次与一个客户端交互,服务端老是段错误,用gdb发现这个path一直都是0x0,不知道什么原因,求老师指正 https://github.com/Ne-Steiner/socket

    作者回复: char * path; path=getcwd(path,128); 这段改下: char path[128]; char * result = getcwd(path, 128); 因为需要分配一段内存给getcwd调用才可以。

    2019-09-20
    2
  • sdjdd
    https://github.com/sdjdd/net-programming-midterm

    作者回复: 写得很不错啊

    2019-09-18
    2
  • ray
    感谢老师的指导,虽然写的有点晕,但还是收获良多。 现在还不敢说能徒手写出良好的socket程式,但若是要除错,使用linux工具找问题,已经顺畅许多了! 再次感谢老师的指导^^ 平常用php开发,就用php写啦XD https://github.com/ChanJuiHuang/php_socket_program

    作者回复: 👍

    2020-04-09
    1
  • 传说中的成大大
    这个期中大作业的难点不在网络方面 在于 如何在程序中如何cd ../ pwd ls等等o(╥﹏╥)o

    作者回复: 被你看出来了 :)

    2019-09-16
    2
    1
  • 孙升
    https://github.com/mandone/net-code/tree/master/mid-test 补作业了,同Java开发,确实有点吃劲

    作者回复: 多写写就好了。

    2021-12-22
  • chs
    https://github.com/chenghengs/network 请多指教

    作者回复: 写得很好。

    2019-11-10
  • YidWang
    消息的去重 没有设计

    作者回复: 具体是指?

    2019-09-24
  • coffee0218
    https://github.com/coffee0218/c_client_server cd ~还是有问题

    作者回复: 可以不用考虑这个特殊情况

    2019-09-19
收起评论
大纲
固定大纲
题干
客户端程序要求
服务器程序要求
显示
设置
留言
16
收藏
27
沉浸
阅读
分享
手机端
快捷键
回顶部