收藏 分享(赏)

linux下的C语言开发(网络编程).doc

上传人:dzzj200808 文档编号:2283808 上传时间:2018-09-09 格式:DOC 页数:2 大小:26KB
下载 相关 举报
linux下的C语言开发(网络编程).doc_第1页
第1页 / 共2页
linux下的C语言开发(网络编程).doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、linux 下的 C 语言开发(网络编程)【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 】不管在 Windows 平台下面还是在 Linux 平台下面,网络编程都是少不了的。在互联网发达的今天,我们的生活基本上已经离不开网络了。我们可以用网络干很多的事情,比如说 IM 聊天、FTP 下载、电子银行、网络购物、在线游戏、电子邮件的收发等等。所以说,对于一个软件的开发者来说,如果说他不会进行网络程序的开发,那真是难以想象的。在开始介绍网络编程的方法之前,我们可以回忆一下计算机网络的相关知识。目前为止,我们使用的最多网络协议还是 tcp/ip 网络。通常来说,我

2、们习惯上称为 tcp/ip 协议栈。至于协议栈分成几层,有两种说法。一种是五层,一种是七层,我个人本身也比较倾向于五层的划分方法。大家可以通过下面的图看看协议栈是怎么划分的。5、应用层4、传输层3、网络层2、数据链路层1、物理层网络的不同层次实现网络的不同功能。物理层主要实现报文的成帧处理;数据链路层完成对报文的优先级的管理,同时实现二层转发和流量控制;网络层实现路由和转发的功能,一方面它需要实现对报文的 fragment 处理,另外一方面它还需要对路由信息进行处理和保存;传输层实现报文的发送和接受,它利用计数、时序、定时器、重发等机制实现对报文的准确发送,当然这都是 tcp 的发送机制,而

3、udp 一般是不保证报文正确发送和接收的;应用层就是根据传输层的端口信息调用不同的程序来处理传输的内容,端口 8080 是 http 报文,端口21 是 ftp 报文等等。上面的逻辑稍显复杂,朋友们可以这么理解,物理层关心的是如何把电气信号变成一段报文;数据链路层关心的是 mac 地址、vlan、优先级等;网络层关心的是 ip 地址,下一跳 ip;传输层关心的是端口资源;应用层关心的是报文组装、解析、渲染、存储、执行等等。目前关于 tcp/ip 完整协议栈的代码很多,其中我认为写得比较好的还是 linux 内核/net/ipv4 下面的代码。如果朋友们对 ipv6 的代码感兴趣,也可以看看/n

4、et/ipv6 的代码。档案如果朋友们对整个协议栈的代码结构理解得不是很清楚,可以参考linux 网络分析与开发这本书。当然,作为应用层,我们的其实考虑的不用这么复杂。对于网络程序编写人员来讲,所有网络的资源只要和一个 socket 关联在一起就可以了。当然在 socket 可用之前,我们需要为它配置端口信息和 ip 地址。配置完了之后,我们就可以慢慢等待报文的收发了。所以一般来说,作为服务器端口的处理流程是这样的,a) 创建 socketb) 绑定 socket 到特定的 ip 地址c) 对 socket 进行侦听处理d) 接受 socket,表明有客户端和服务器连接e) 和客户端循环收发报

5、文f) 关闭 socket作为服务器程序而言,它要对特定的端口进行绑定和侦听处理,这样稍显复杂。但是如果是编写客户端的程序,一切的一切就变得非常简单了,a) 创建 socketb) 链接服务器端地址c) 和服务器端的 socket 收发报文上面只是对网络编程做了一个基本的介绍,但是好多的东西还是没有涉及到,比如说:(1) 什么时候该使用udp,什么时候该使用 tcp?(2) 如何把多线程和网络编程联系在一起? (3) 如何把多进程和网络编程联系在一起? (4) 如何利用 select 函数、epoll_create 机制、非阻塞函数提高 socket 的并发处理效率? (5) linux 内核是怎么实现 tcp/ip 协议的? (6) 我们自己是否也可以实现协议的处理流程等等?关于这些内容,我们会重新开辟一个主题,逐步进行分析和仿真处理。敬请期待。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报