Linux网络编程。我该从哪里开始?

8

最近我对Linux网络编程产生了兴趣,并阅读了一些相关资料(Beej's Guide to Network Programming)。但现在我有些困惑。我想写点东西来练习,但不知道具体该写什么。请推荐几个项目让我开始吧?

谢谢。

6个回答

6

编写一个非常简单的Web服务器,它将在端口80上接受连接并返回页面。

然后您可以扩展它以支持其他媒体下载(例如图像)。

然后,您可以添加一些(预构建的)脚本语言解释器,用于处理PHP、Perl等页面。

在此过程中,您将学到很多东西。


5
除了不要尝试在80端口进行侦听,因为那需要特殊权限。请在8000端口进行侦听,对于初学者来说更加简单。 - S.Lott

5
我建议先开发一个简单的多人游戏,比如井字棋:
  • 使用ncurses(易于编程的图形界面)
  • 管理大厅,让玩家可以加入
  • 管理游戏(由一个玩家向另一个玩家请求开始)
  • 管理排行榜或等级
  • 为所有加入的人管理全局聊天和正在玩的人管理本地聊天
当然,我建议井字棋,但你也可以选择其他类似的游戏(规则简单即可)......重要的是要关心许多同时进行游戏的客户端(处理数据转发和游戏管理),并向玩家发送状态(例如游戏列表)。
这个例子的好处是你有一个两层协议:
  • 第一层用于处理全局操作
  • 第二层用于处理单个游戏

我在学校里不得不做一个像这样的Boggle游戏。学到了很多东西。 - Erix

5
我不确定您想要开始多深入的Linux网络编程生涯,但如果您只想开始处理套接字,那么最简单的示例可能是生产者/消费者配对或回声服务器。另一个好的来源是查看分布式计算的任何大学/学院课程中的示例/作业。
生产者/消费者
这可以在计算机上的一对终端中运行以进行测试。创建两个应用程序:
- 生产者程序从主机名和端口开始,从用户获取输入行,连接到消费者,将其发送到输入,请求另一行输入,并在达到EOF(Ctrl-D)时完成。 - 消费者程序从侦听端口开始,等待来自生产者的连接,读取生产者发送的消息,输出该消息,关闭与生产者的连接,并在收到中断(Ctrl-C)时正常退出。
回声服务器
与生产者/消费者类似的想法。
- 回声服务器从侦听端口开始,等待连接,从客户端读取消息,将相同的消息发送回客户端,并在收到中断(Ctrl-C)时正常退出。 - 回声客户端从主机名和端口开始,从用户获取输入行,连接到服务器,发送输入,读取响应,比较两者以验证它是回声,请求另一行输入,并在达到EOF时完成。

我非常喜欢Echo这个想法。你可以通过将其变成类似于Ping的一对来进一步简化 :) - Matthieu M.

4
我建议您找到任何一门计算机网络实验课程页面,并解决相关作业。在那里,您将找到问题的详细说明,并且作业将按复杂度递增的顺序排列。您可以通过在Google中搜索“inurl:edu computer networks lab assignments”(不带引号)来找到这样的网页。
以下是一些优秀的作业(附有非常详细的解释)。请按照以下顺序尝试实现它们。

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn1.pdf

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn2.pdf

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn3.pdf

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn5.pdf

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn6.pdf

http://www.facweb.iitkgp.ernet.in/~agupta/netlab/Assgn7.pdf


2
我可以建议使用Wireshark - 它将帮助您理解网络流量的来回传输。

虽然Wireshark是一个很棒的产品,但它如何帮助某人学习网络编程呢? - qrdl
1
我认为学习网络流对于网络编程至关重要。此外,它可以轻松帮助调试。而且,它非常有趣 :-) - Nate

1
阅读的书籍是R. Stevens的《Unix网络编程》:http://www.kohala.com/start/unpv12e.html 要做的项目是TCP代理或Web代理。将其设计为单线程,但当然要处理多个连接。你应该能够在一周的业余时间内完成它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接