基本信息
编辑推荐
为初学者准备的网络编程
本书涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。此书面向利用套接字进行网络编程的初学者,具备C语言基础知识的读者会获得更多帮助。书中收录了丰富的示例,详细展现了Linux和Windows平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型服务器端的区别,还包括了条件触发与边缘触发等知识,对开发实践也有很大帮助。
内容简介
计算机书籍
《TCP/IP网络编程》涵盖操作系统、系统编程、TCP/IP 协议等多种内容,结构清晰、讲解细致、通俗易懂。书中收录丰富示例,详细展现了Linux 和Windows 平台下套接字编程的共性与个性。特别是从代码角度说明了不同模型服务器端的区别,还包括了条件触发与边缘触发等知识,对开发实践也有很大帮助。
《TCP/IP网络编程》针对网络编程初学者,面向具备C 语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows 网络编程的人。
第一部分主要介绍网络编程基础知识。此部分主要论述Windows和Linux平台网络编程必备基础知识,未过多涉及不同操作系统特性。
第二部分和第三部分与操作系统有关。第二部分主要是Linux相关内容,而第三部分主要是Windows相关内容。从事Windows编程的朋友浏览第二部分内容后,同样可以提高技艺。
第四部分对全书内容进行总结,包含了作者在自身经验基础上总结的学习建议,还介绍了网络编程经典书籍。
作译者
曾为风投公司开发人员,因出版IT类书籍并开展相关讲座而闻名。2004年至今一直参与OpenGL ES图形库的建设和3D加速芯片的开发,以及Khronos Group(移动国际标准化财团)的标准制定相关业务,还参与手机DMB芯片的开发。现任(株)Axissoft公司CTO,致力于构建基于Web的解决方案。
ripeness21@gmail.com
金国哲
毕业于重庆大学计算机学院,2009年至今在延边大学计算机系任教。
主讲课程:Java程序设计、Android应用开发、Web程序设计等。
主要研究方向:跨语言检索、自然语言处理等。
曾主持并参与某部队入侵检测系统、论文自动采集及管理系统等多个软件开发项目。
目录
第一部分 开始网络编程
第1章 理解网络编程和套接字 2
1.1 理解网络编程和套接字 2
1.2 基于Linux的文件操作 9
1.3 基于Windows平台的实现 15
1.4 基于Windows的套接字相关函数及示例 18
1.5 习题 24
第2章 套接字类型与协议设置 26
2.1 套接字协议及其数据传输特性 26
2.2 Windows平台下的实现及验证 32
2.3 习题 35
第3章 地址族与数据序列 36
3.1 分配给套接字的IP地址与端口号 36
3.2 地址信息的表示 39
3.3 网络字节序与地址变换 42
3.4 网络地址的初始化与分配 45
3.5 基于Windows的实现 52
3.6 习题 57
第4章 基于TCP的服务器端/客户端(1) 59
前言
本书面向基于套接字的网络编程学习者,所以不需要太多基础知识。但示例使用C语言编写而成,因此需要这方面的理解。我相信各位已经具备一定的C语言基础。
掌握网络相关基础知识将有助于学习,但并不绝对。本书针对的是网络编程的初学者,因此,书中首先强调的是所有示例的可读性,之后才考虑代码优化问题。
本书适合所有希望学习Linux和Windows网络编程的人士,所以无论使用哪种操作系统都不会有问题。但我想说,网络编程的特点决定了同时学习两种操作系统平台的网络编程是最有效的学习方法。如果说在一种操作系统下学习网络编程需要十分努力,那么同时学习两种平台仅需十二分功夫,可谓事半功倍。
没有必要为学习本书而特意掌握Linux和Windows的所有操作方法,只需了解编译方法即可,书中详细讲解了Linux平台下的编译方法。大部分示例都在Linux和Windows平台下实现,很容易找到网络编程中不同操作系统的差异。
本书结构
本书共分4个部分,各部分的内容如下。
第一部分主要介绍网络编程基础知识。此部分主要由Windows和Linux平台网络编程必备基础知识构成,不会过多涉及操作系统特性相关内容。第一部分并非第二部分和第三部分的简化版,而是介绍了两种操作系统的共性。
第一部分的特点决定了本书的叙述方式。如果根据不同操作系统分别展开叙述,则会产生大量重复内容。因此,本书围绕一个操作系统进行讲解,然后指出系统间差异。选择哪一种操作系统也成为困扰我的一个问题,刚开始考虑使用相对流行的Windows,但最终选了Linux。Windows套接字是以UNIX系列的BSD套接字模型为基础设计而成的,所以我认为先介绍Linux平台下的套接字更有助于理解。这个决定也反映出不少程序员的想法,相信同样有助于各位学习。其实基于哪种操作系统展开叙述对第一部分的影响并不大,关于这一点,各位在学习过程中会有切身感悟。
第二部分和第三部分与操作系统有关。不同操作系统提供的系统函数不同,支持的功能也有差异,因此,有些内容必须分开讨论。第二部分主要是Linux相关内容,而第三部分主要是Windows相关内容。希望从事Windows编程的朋友也浏览一下第二部分的内容,即使在Windows平台下编程,这部分内容同样会帮助您提高技艺。
第四部分是收尾阶段,各位可以把这部分内容视为对之前学习的总结。其中包含了我作为网络编程先行者的学习建议,希望大家以轻松的心态阅读。
序言
为初学者准备的网络编程
我曾有一段时间痴迷于学习网络编程,那时关注的重点是网络技术,也因此走上了网络编程之路。现在回想起来也没有什么特别的理由,只是因为我个人认为网络编程是程序员的基本功。当时学完C和C++后,我购买了外国知名作者撰写的网络编程书。虽然是英文书,而且内容较多,但我对自己的网络技术和编程技术相当自信,选书的时候毫不犹豫。但不到一周就实在看不下去了,并不是因为书的质量没有想象的那么好,或者有英文障碍,主要是因为自己连书中示例都无法正常调试通过。
之后,我在大学研究室和公司接触了大量开发人员,逐渐对各个领域有了更深入的认识,也因此产生了重拾书本的勇气。再去读的时候发现原书写得的确非常棒。
我并不是特别聪明或理解力特别强的人,所以花费大量时间学习了属于程序员必修课的操作系统和算法。对我而言,学习知名的计算机理论原著是不小的负担。当时的我最需要的是通俗易懂的书,并不是笼统的叙述,而是详细的说明,同时符合我的水平。
如果各位与我当年的水平一样,那本书正是为大家准备的。对于已经掌握大量网络编程相关知识并希望得到提升的读者而言,本书可能过于简单。而第一次接触网络编程的读者,或者在学习过程中像我一样受过挫折的读者,都能通过本书获得很大帮助。
我在书中也尝试探讨了更多深层问题,但同时又担心读者对此产生抵触情绪。感谢那些选择本书并给予好评的读者们!
借此机会,我要感谢韩浩、智秀、胜熙、朱英及其学生帮我修改病句和错别字。另外,向智敏(不允许我在家工作而只能休息)、智律(对不起,没能抱着你陪你玩)和他们的“队长”燕淑表示深深的歉意。
最后,感谢敬爱的母亲,您一直为深夜还在写书的我而操心。感谢宋盛根组长、李升振组长,你们让我懂得写书并非一人之力。感谢帮助我完善本书的编辑们。感谢对本书提出宝贵意见的同事们,以及鼓励并祝福我的所有朋友们。
尹圣雨
媒体评论
书摘
网络编程领域需要一定的操作系统和系统编程知识,同时还需要理解好TCP/IP网络数据传输协议。这么说来,网络编程的确需要一定的基础知识,但相比于其他领域,它更有趣,而且没想象中那么难。只要踏踏实实学习,任何人都可以轻松进入网络编程的世界。
深入细节前,本章先帮助各位建立对本书的总体认识,并简要了解后面的内容。希望通过本章的学习,大家能对网络编程有初步了解,摆脱对它的畏惧。
1.1理解网络编程和套接字
学习C语言时,一般会先学利用printf函数和scanf函数进行控制台输入输出,然后学习文件输入输出。如果各位认真学习过C语言就会发现,控制台输入输出和文件输入输出非常类似。实际上,网络编程也与文件输入输出有很多相似之处,相信大家也能轻松掌握。
网络编程和套接字概要
网络编程就是编写程序使两台连网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中简单许多。那么,这两台计算机之间用什么传输数据呢?首先需要物理连接。如今大部分计算机都已连接到庞大的互联网,因此不用担心这点。在此基础上,只需考虑如何编写数据传输软件。但实际上这也不用愁,因为操作系统会提供名为“套接字”(socket)的部件。套接字是网络数据传输用的软件设备。即使对网络数据传输原理不太熟悉,我们也能通过套接字完成数据传输。因此,网络编程又称为套接字编程。那为什么要用“套接字”这个词呢?我们把插头插到插座上就能从电网获得电力供给,同样,为了与远程计算机进行数据传输,需要连接到因特网,而编程中的“套接字”就是用来连接该网络的工具。它本身就带有“连接”的含义,如果将其引申,则还可以表示两台计算机之间的网络连接。
构建接电话套接字
套接字大致分为两种,其中,先要讨论的TCP套接字可以比喻成电话机。实际上,电话机也是通过固定电话网(telephone network)完成语音数据交换的。因此,我们熟悉的固定电话与套接字实际并无太大区别。下面利用电话机讲解套接字的创建及使用方法。
电话机可以同时用来拨打或接听,但对套接字而言,拨打和接听是有区别的。我们先讨论用于接听的套接字创建过程。
调用socket函数(安装电话机)时进行的对话
问:“接电话需要准备什么?”
答:“当然是电话机!”
有了电话机才能安装电话,接下来,我们就准备一部漂亮的电话机。下列函数创建的就是相当于电话机的套接字。
#include (sys/socket.h)
int socket(int domain, int type, int protocol);
成功时返回文件描述符,失败时返回?1。
上述函数及本章涉及的其他函数的详细说明将在以后章节中逐一给出,现在只需掌握“原来是由socket函数生成套接字的”就足够了。另外,我们只需购买机器,剩下的安装和分配电话号码等工作都由电信局的工作人员完成。而套接字需要我们自己安装,这也是套接字编程难点所在,但多安装几次就会发现其实不难。准备好电话机后要考虑分配电话号码的问题,这样别人才能联系到自己。
调用bind函数(分配电话号码)时进行的对话
问:“请问您的电话号码是多少?”