linux下的C语言socket网络编程

不管在Windows平台下面还是在Linux平台下面,网络编程都是少不了的。在互联网发达的今天,我们的生活基本上已经离不开网络了。我们可以用网络干很多的事情,比如说IM聊天、FTP下载、电子银行、网络购物、在线游戏、电子邮件的收发等等。所以说,对于一个软件的开发者来说,如果说他不会进行网络程序的开发,那真是难以想象的。


     在开始介绍网络编程的方法之前,我们可以回忆一下计算机网络的相关知识。目前为止,我们使用的最多网络协议还是tcp/ip网络。通常来说,我们习惯上称为tcp/ip协议栈。至于协议栈分成几层,有两种说法。一种是五层,一种是七层,我个人本身也比较倾向于五层的划分方法。大家可以通过下面的图看看协议栈是怎么划分的。


    5、应用层
    4、传输层
    3、网络层
    2、数据链路层
    1、物理层


     网络的不同层次实现网络的不同功能。物理层主要实现报文的成帧处理;数据链路层完成对报文的优先级的管理,同时实现二层转发和流量控制;网络层实现路由和转发的功能,一方面它需要实现对报文的fragment处理,另外一方面它还需要对路由信息进行处理和保存;传输层实现报文的发送和接受,它利用计数、时序、定时器、重发等机制实现对报文的准确发送,当然这都是tcp的发送机制,而udp一般是不保证报文正确发送和接收的;应用层就是根据传输层的端口信息调用不同的程序来处理传输的内容,端口8080是http报文,端口21是ftp报文等等。上面的逻辑稍显复杂,朋友们可以这么理解,

     物理层关心的是如何把电气信号变成一段报文;数据链路层关心的是mac地址、vlan、优先级等;网络层关心的是ip地址,下一跳ip;传输层关心的是端口资源;应用层关心的是报文组装、解析、渲染、解析、存储、执行等等。

     目前关于tcp/ip完整协议栈的代码很多,其中我认为写得比较好的还是linux内核/net/ipv4下面的代码。如果朋友们对ipv6的代码感兴趣,也可以看看/net/ipv6的代码。档案如果朋友们对整个协议栈的代码结构理解得不是很清楚,可以参考《linux网络分析与开发》这本书。

     当然,作为应用层,我们的其实考虑的不用这么复杂。对于网络程序编写人员来讲,所有网络的资源只要和一个socket关联在一起就可以了。当然在socket可用之前,我们需要为它配置端口信息和ip地址。配置完了之后,我们就可以慢慢等待报文的收发了。所以一般来说,作为服务器端口的处理流程是这样的,

    a) 创建socket
    b) 绑定socket到特定的ip地址
    c) 对socket进行侦听处理
    d) 接受socket,表明有客户端和服务器连接
    e) 和客户端循环收发报文
    f) 关闭socket


     作为服务器程序而言,它要对特定的端口进行绑定和侦听处理,这样稍显复杂。但是如果是编写客户端的程序,一切的一切就变得非常简单了,

    a) 创建socket
    b) 链接服务器端地址
    c) 和服务器端的socket收发报文


     上面只是对网络编程做了一个基本的介绍,但是好多的东西还是没有涉及到,比如说:(1) 什么时候该使用udp,什么时候该使用tcp?(2) 如何把多线程和网络编程联系在一起? (3) 如何把多进程和网络编程联系在一起? (4) 如何利用select函数、epoll_create机制、非阻塞函数提高socket的并发处理效率? (5) linux内核是怎么实现tcp/ip协议的? (6) 我们自己是否也可以实现协议的处理流程等等?

 

毕业后头五年决定你的一生                                       10类最急需IT人才:Java开发者居首       

海量Android教程、开发资料和源码                         给将成为“Android高手”的10个建议 

成为Java高手的25个学习目标--非常经典               Android 4.1果冻豆新特性详解 

Java侵权诉讼Google获胜,Android厚积薄发          面试必备:Android笔试总结 

Android高手必须掌握的28大内容和10个建议       Android平台研发人才缺口30万 

Android开发环境安装和配置步骤详细图解            2012国内移动App开发者大调查结果 

Windows 7下搭建android开发环境步骤图解        Android 4.0的30个突出的新特性 

Android高手要经过的6个阶段和6个境界               linux下搭建Android开发环境步骤 

从IT菜鸟变为“IT骨干开发者”的11个建议          程序员编程技术迅速提高的终极攻略 

2012世界各国人均GDP排名,中国超泰国              2012年全国各省平均工资排行 

2012年中国大学高校排行榜(580强排名)         中国各省市面积和人口数量排名 

中国百万开发者大调查:程序员的薪水不错         Java高手需要越过的10座高山

周立功谈嵌入式:我的25年嵌入式生涯                Android和Java语言的异同和关系 

华为中国区手机销量达千万,80%为智能机           谷歌Android碎片化严重

2012年中国各省GDP和人均GDP排名                 90后就业“钱景”:IT仍是最佳选择

2012全球城市竞争力500强,69个中国城市上榜   不要做浮躁的软件工程师 

2012年世界500强,79家大陆香港台湾公司上榜名单 给IT新兵的15个建议 

美国知名科技公司入门级软件工程师的薪水排名  回顾Java经过的风风雨雨 

71道经典Android面试题和答案--重要知识点都涉及到了 

芯片巨头海思和展讯:给中国芯片业带来信心    海量经典Java教程、学习资料和源码

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章