目录
第1章概述
1.1网络编程简介
1.2练习文件
1.3开发工具准备
1.4Java I/O流<p> </p> <p> </p> <p>目录</p> <p> </p> <p> </p> <p>第1章概述</p> <p> </p> <p>1.1网络编程简介</p> <p> </p> <p>1.2练习文件</p> <p> </p> <p>1.3开发工具准备</p> <p> </p> <p>1.4Java I/O流</p> <p> </p> <p>1.5Java Socket</p> <p> </p> <p>1.6Java线程</p> <p> </p> <p>1.7客户机/服务器一对一通信模型</p> <p> </p> <p>1.8服务器程序</p> <p> </p> <p>1.9客户机程序</p> <p> </p> <p>1.10小结</p> <p> </p> <p>1.11实验1: 探索网络编程世界</p> <p> </p> <p>1.12习题1</p> <p> </p> <p>第2章一客户一线程</p> <p> </p> <p>2.1作品演示</p> <p> </p> <p>2.2本章**知识介绍</p> <p> </p> <p>2.3客户机界面设计</p> <p> </p> <p>2.4服务器界面设计</p> <p> </p> <p>2.5客户机连接服务器</p> <p> </p> <p>2.6客户机发送消息</p> <p> </p> <p>2.7服务器启动线程及连接线程</p> <p> </p> <p>2.8客户机会话线程</p> <p> </p> <p>2.9小结</p> <p> </p> <p>2.10实验2: 用SwingWorker改写线程</p> <p> </p> <p>2.11习题2</p> <p> </p> <p>第3章线程池</p> <p> </p> <p>3.1作品演示</p> <p> </p> <p>3.2本章**知识介绍</p> <p> </p> <p>3.3客户机界面设计</p> <p> </p> <p>3.4服务器界面设计</p> <p> </p> <p>3.5自定义协议类</p> <p> </p> <p>3.6启动服务器</p> <p> </p> <p>3.7连接线程</p> <p> </p> <p>3.8关闭线程池</p> <p> </p> <p>3.9客户线程</p> <p> </p> <p>3.10客户机连接服务器</p> <p> </p> <p>3.11客户机发送消息</p> <p> </p> <p>3.12小结</p> <p> </p> <p>3.13实验3: 线程池与一客户一线程</p> <p> </p> <p>3.14习题3</p> <p> </p> <p>第4章非阻塞I/O</p> <p> </p> <p>4.1作品演示</p> <p> </p> <p>4.2本章**知识介绍</p> <p> </p> <p>4.3客户机界面设计</p> <p> </p> <p>4.4服务器界面设计</p> <p> </p> <p>4.5服务器自定义协议类</p> <p> </p> <p>4.6启动服务器</p> <p> </p> <p>4.7服务器轮询线程</p> <p> </p> <p>4.8服务器处理连接</p> <p> </p> <p>4.9服务器读写数据</p> <p> </p> <p>4.10客户机连接服务器</p> <p> </p> <p>4.11客户机出拳逻辑</p> <p> </p> <p>4.12小结</p> <p> </p> <p>4.13实验4: 非阻塞I/O实验拓展</p> <p> </p> <p>4.14习题4</p> <p> </p> <p>第5章UDP协议通信</p> <p> </p> <p>5.1作品演示</p> <p> </p> <p>5.2本章**知识介绍</p> <p> </p> <p>5.3客户机登录界面</p> <p> </p> <p>5.4客户机会话界面</p> <p> </p> <p>5.5服务器界面</p> <p> </p> <p>5.6消息类与转换类</p> <p> </p> <p>5.7消息协议设计</p> <p> </p> <p>5.8客户机登录逻辑</p> <p> </p> <p>5.9客户机发送消息</p> <p> </p> <p>5.10客户机离开逻辑</p> <p> </p> <p>5.11客户机自动接收消息</p> <p> </p> <p>5.12启动服务器</p> <p> </p> <p>5.13服务器处理消息线程</p> <p> </p> <p>5.14小结</p> <p> </p> <p>5.15实验5: QQ聊天项目拓展</p> <p> </p> <p>5.16习题5</p> <p> </p> <p>第6章TCP协议传输文件</p> <p> </p> <p>6.1作品演示</p> <p> </p> <p>6.2本章**知识介绍</p> <p> </p> <p>6.3工具栏、弹出菜单和进度条</p> <p> </p> <p>6.4选择文件</p> <p> </p> <p>6.5文件发送线程</p> <p> </p> <p>6.6服务器处理连接线程</p> <p> </p> <p>6.7服务器接收文件线程</p> <p> </p> <p>6.8小结</p> <p> </p> <p>6.9实验6: 端口扫描器</p> <p> </p> <p>6.10习题6</p> <p> </p> <p>第7章SSL**通信</p> <p> </p> <p>7.1作品演示</p> <p> </p> <p>7.2本章**知识介绍</p> <p> </p> <p>7.3用keytool生成公钥/私钥</p> <p> </p> <p>7.4创建QQDB数据库</p> <p> </p> <p>7.5数据库操作类</p> <p> </p> <p>7.6密钥算法类</p> <p> </p> <p>7.7数据库测试与数据准备</p> <p> </p> <p>7.8完成**登录设计</p> <p> </p> <p>7.9发送文件与数字签名线程</p> <p> </p> <p>7.10服务器处理连接线程</p> <p> </p> <p>7.11接收文件与验证签名线程</p> <p> </p> <p>7.12小结</p> <p> </p> <p>7.13实验7: **登录与**注册</p> <p> </p> <p>7.14习题7</p> <p> </p> <p>第8章网络抓包与协议分析</p> <p> </p> <p>8.1作品演示</p> <p> </p> <p>8.2本章**知识介绍</p> <p> </p> <p>8.3创建项目框架</p> <p> </p> <p>8.4用户界面设计</p> <p> </p> <p>8.5捕获网络数据包</p> <p> </p> <p>8.6包过滤器</p> <p> </p> <p>8.7自定义显示类</p> <p> </p> <p>8.8文件操作</p> <p> </p> <p>8.9主程序逻辑设计</p> <p> </p> <p>8.10小结</p> <p> </p> <p>8.11实验8: WireShark与Sniffer</p> <p> </p> <p>8.12习题8</p> <p> </p> <p>第9章Java邮件客户端</p> <p> </p> <p>9.1作品演示</p> <p> </p> <p>9.2本章**知识介绍</p> <p> </p> <p>9.3SMTP协议概述与体验</p> <p> </p> <p>9.4POP3协议概述与体验</p> <p> </p> <p>9.5IMAP协议概述</p> <p> </p> <p>9.6JavaMail概述</p> <p> </p> <p>9.7客户端登录界面设计</p> <p> </p> <p>9.8客户端主界面设计</p> <p> </p> <p>9.9客户端邮件编辑界面设计</p> <p> </p> <p>9.10邮件发送功能</p> <p> </p> <p>9.11邮件接收类</p> <p> </p> <p>9.12邮件的解析与显示</p> <p> </p> <p>9.13小结</p> <p> </p> <p>9.14实验9: 邮件客户端拓展</p> <p> </p> <p>9.15习题9</p> <p> </p> <p>第10章Java WebSocket</p> <p> </p> <p>10.1作品演示</p> <p> </p> <p>10.2本章**知识介绍</p> <p> </p> <p>10.3开发准备</p> <p> </p> <p>10.4熟悉WebSocket</p> <p> </p> <p>10.5编写基础类</p> <p> </p> <p>10.6实现对数据库的操作</p> <p> </p> <p>10.7JSON格式转换</p> <p> </p> <p>10.8实现注册功能</p> <p> </p> <p>10.9实现登录与退出功能</p> <p> </p> <p>10.10编写聊天页面</p> <p> </p> <p>10.11实现收发信息与保存聊天记录</p> <p> </p> <p>10.12实现服务器群聊功能</p> <p> </p> <p>10.13小结</p> <p> </p> <p>10.14实验10: 实现私聊功能</p> <p> </p> <p>10.15习题10</p> <p> </p> <p>第11章Nodejs和Socket.IO实现在线客服</p> <p> </p> <p>11.1作品演示</p> <p> </p> <p>11.2本章**知识介绍</p> <p> </p> <p>11.3搭建简单的Web服务器</p> <p> </p> <p>11.4应用Backbonejs完成登录注册界面</p> <p> </p> <p>11.5初识MongoDB</p> <p> </p> <p>11.6连接MongoDB完成登录注册</p> <p> </p> <p>11.7完成聊天室基本界面</p> <p> </p> <p>11.8实现文本聊天功能</p> <p> </p> <p>11.9发送可爱表情</p> <p> </p> <p>11.10完成语音通话</p> <p> </p> <p>11.11小结</p> <p> </p> <p>11.12实验11: 存储聊天记录</p> <p> </p> <p>11.13习题11</p> <p> </p> <p>第12章网络爬虫</p> <p> </p> <p>12.1作品演示</p> <p> </p> <p>12.2本章**知识介绍</p> <p> </p> <p>12.3简单的网页抓取实例</p> <p> </p> <p>12.4处理HTTP状态码</p> <p> </p> <p>12.5分析目标页面参数</p> <p> </p> <p>12.6GET方法传递请求参数</p> <p> </p> <p>12.7POST方法传递请求参数</p> <p> </p> <p>12.8获取SSL加密页面</p> <p> </p> <p>12.9获取异步请求数据</p> <p> </p> <p>12.10处理HTML文本</p> <p> </p> <p>12.11处理JSON文本</p> <p> </p> <p>12.12信息数据的汇总处理</p> <p> </p> <p>12.13小结</p> <p> </p> <p>12.14实验12: 网络爬虫实验拓展</p> <p> </p> <p>12.15习题12</p> <p> </p> <p>第13章Android QQ客户端</p> <p> </p> <p>13.1作品演示</p> <p> </p> <p>13.2本章**知识介绍</p> <p> </p> <p>13.3新建QQClient项目</p> <p> </p> <p>13.4用户类User</p> <p> </p> <p>13.5用户适配器类UserItemAdapter</p> <p> </p> <p>13.6消息适配器类MessageItemAdapter</p> <p> </p> <p>13.7登录类LoginActivity及其布局</p> <p> </p> <p>13.8注册类RegisterActivity及其布局</p> <p> </p> <p>13.9用户列表类ListActivity及其布局</p> <p> </p> <p>13.10聊天类ChatActivity及其布局</p> <p> </p> <p>13.11全局配置文件AndroidManifest.xml</p> <p> </p> <p>13.12服务器的变化</p> <p> </p> <p>13.13小结</p> <p> </p> <p>13.14实验13: Android QQ实验拓展</p> <p> </p> <p>13.15习题13</p> <p> </p> <p>第14章Android新闻客户端</p> <p> </p> <p>14.1作品演示</p> <p> </p> <p>14.2本章**知识介绍</p> <p> </p> <p>14.3编写新闻客户端主界面</p> <p> </p> <p>14.4编写新闻导航栏</p> <p> </p> <p>14.5编写新闻标题布局</p> <p> </p> <p>14.6本地新闻加载示例</p> <p> </p> <p>14.7使用Volley加载聚合数据</p> <p> </p> <p>14.8NetNewsAdapter优化</p> <p> </p> <p>14.9小结</p> <p> </p> <p>14.10实验14: OkHttp框架</p> <p> </p> <p>14.11习题14</p> <p> </p> <p>第15章Android企业即时通信系统</p> <p> </p> <p>15.1作品演示</p> <p> </p> <p>15.2本章**知识介绍</p> <p> </p> <p>15.3搭建开发环境</p> <p> </p> <p>15.4初始源代码</p> <p> </p> <p>15.5连接服务器实现注册功能</p> <p> </p> <p>15.6登录和退出功能</p> <p> </p> <p>15.7获取好友并填充列表</p> <p> </p> <p>15.8发送文本消息</p> <p> </p> <p>15.9接收文本消息</p> <p> </p> <p>15.10添加和删除好友</p> <p> </p> <p>15.11分享位置之百度定位</p> <p> </p> <p>15.12分享位置之标记地图</p> <p> </p> <p>15.13小结</p> <p> </p> <p>15.14实验15: 拓展系统功能</p> <p> </p> <p>15.15习题15</p> <p> </p> <p>参考文献</p>显示全部信息前 言
前言
<p> </p> <p> </p> <p>前言</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>当今时代,工业4.0,互联网 ,万网互联,万物互联,哪里有网络,哪里就有网络编程。网络程序是主宰网络世界的神经系统,是**大脑。学习网络编程,有助于更好地学习网络、利用网络和改造网络。</p> <p>当笼统地说起云计算、大数据、互联网 时,常常有“老虎吃天不知从哪儿下口”的困惑。而网络编程被普遍认为是一门“胶水”课程,能够有效融合计算机网络、程序设计、数据库技术等众多课程的知识,对于提**生的实践创新能力极其重要。由此可见,网络编程正是老虎可以下口之处。</p> <p>本书是作者在网络编程教学领域多年的经验总结,具有鲜明的创新特色: 全书以应用为导向,以网络编程方法为核心,着重从实践层面实施案例教学,理论与实践结合; 每章各实现一个案例,循序渐进,贴近实战; 案例范围覆盖桌面网络编程、Web网络编程、Android网络编程三个层次; 每个案例解决一个不同的问题,案例汇聚在一起勾勒出网络编程大局观的画卷。</p> <p>全书共分15章。第1章概述网络编程基本理论与方法。第2章以Echo项目为例讲解服务器的一客户一线程技术。第3章以Knock Knock游戏为例讲解自定义协议机制以及服务器的线程池技术。第4章以“石头、剪刀、布”游戏为例,讲解服务器非阻塞I/O通道技术。第5章内容拓展到UDP协议通信领域,讲解UDP客户机/服务器技术、UDP广播技术,实现QQ客户端/服务器的初级设计。第6章讲解文件传输技术,将TCP传输文件模块有机融合到QQ聊天项目中。第7章讲解SSL**通信技术,涉及哈希摘要、加密解密、公钥/私钥和**套接字技术等,用SSL相关**技术实现文件的数字签名,综合数据库技术和SSL技术,实现用户的**注册与**登录设计。第8章讲解网络抓包程序和协议分析程序的设计,为网络创新夯实理论基础和实践基础。总之,前面8章内容都是基于桌面网络编程的,以Java Socket技术为核心。</p> <p>第9章内容拓展到Java邮件客户端,基于JavaMail实现邮件收发客户端,**读者了解邮件系统运行的奥秘。第10章基于Java WebSocket实现Web聊天室的设计,用js技术保存聊天记录,将Java网络编程能力拓展到Web领域。第11章基于Nodejs Socket.IO技术实现Web客服系统设计,尽管Nodejs不属于Java网络编程范畴,但是Nodejs的WebSocket技术与Java的WebSocket技术有异曲同工之妙。第12章揭示网络海量信息智能抓取原理,以获取ACM大赛训练信息为例讲解网络爬虫的编程方法。第9~12章将网络编程拓展到Web层面,实现了基于Web的经典应用,以Web通信和数据库技术为核心。</p> <p>第13章是在前面桌面版QQ和服务器的基础上,实现Android版的QQ客户端,揭示了Java网络编程在桌面系统和Android系统的技术一致性。第14章以HttpURLConnection技术为基础,带领读者领略HTTP协议通信的精彩。本章运用Volley、OkHttp开源框架,借助聚合数据的开源API获取新闻数据,实现了功能丰富的Android新闻客户端项目设计。第15章基于Openfire开源服务器、MySQL数据库、百度地图SDK、XMPP协议实现了一个企业级即时通信协作系统。第13~15章将网络编程从桌面、Web进一步拓展到Android领域,**读者完成三个层次APP的案例学习。</p> <p>本教程建议学时分配如下: 第1~6章、第9~11章每章四学时,第7~8章、第12~15章每章六学时,合计72学时。</p> <p>本书每章均有大量的习题供读者巩固所学内容,其中有不少习题是拓展习题,通过练习此类习题,可拓宽读者的视野。</p> <p>为便于读者学习,本书每一章每一节都录制了教学视频,读者扫描每一节的二维码,可以用慕课方式与教材同步在线学习。本书所有与教材同步的案例源程序以及教学课件等电子资源,均可从清华大学出版社网站免费下载。</p> <p>全书编写分工如下: 董相志编写了第1~8章和第13章,并负责全书的统稿与定稿工作。唐玉凯编写了第9章,张岳强编写了第10章,刘学刚编写了第11章,逯其鲁编写了第12章,贾金公编写了第14章,郭峰编写了第15章。唐玉凯、张岳强、刘学刚、逯其鲁、贾金公、郭峰六位作者排名不分先后,并列为本书第二作者。每一章习题后面留有该章作者邮箱,欢迎广大读者来信切磋交流。</p> <p>读者可能会对本书的作者阵容感到好奇,关于这些青年才俊的老师,这里对他们做个郑重推介: 唐玉凯、张岳强、刘学刚、逯其鲁、贾金公、郭峰六位都是鲁东大学2014级软件工程专业的学生。六位同学完成本书时,仍然是大三在读,恰同学少年,风华正茂,书生意气,其作品亦挥斥方遒。</p> <p>总之,本书每一章都是经典应用,都有精彩讲述,都有理论与实践结合的逻辑推演。理论从实践中来,再回到实践中去。读者跟着每一章的作者去完成每一章的学习,就会有“会当凌绝顶,一览众山小”的感受。</p> <p>本书创作过程中参阅了大量文献,借鉴了众多**创意,推陈出新,方有此书,在此谨向各文献的作者表示诚挚的感谢和崇高的敬意。</p> <p>本书有幸得到了清华大学出版社黄芝老师的精心策划,并特别感谢黄芝老师匠心独运设计了微课模式,感谢所有编辑老师的严谨审校和精心编排,感谢清华大学出版社让本书以优雅的外表与广大读者见面。</p> <p>感谢读者对本书的支持与厚爱,愿本书与读者一起成长。书中难免有疏漏之处,欢迎广大读者批评指正,作者信箱: upsunny2008@163.com。</p> <p>本书以读者为**,以作品创见未来,本书品格,有诗为证: </p> <p>网络编程甲天下,</p> <p>师生携手共登攀。</p> <p>作品数度生奇志,</p> <p>洪荒神力冲云天。</p> <p>逻辑推演千百遍,</p> <p>快马加鞭不下鞍。</p> <p>教学相长乐无涯,</p> <p>实践国里有新篇。</p> <p> </p> <p>董相志于鲁东大学</p> <p>2017年3月</p> <p> </p>显示全部信息免费在线读第5章UDP协议通信
QQ是一款功能强大的即时通信软件,文本、图片、语音、视频、文件……想象不出还有什么数据是不能通过QQ交换的。QQ让人们的沟通与协作变得更好,让人们天涯若比邻。本章借QQ之光,演绎UDP协议之精彩。5.1作 品 演 示作品描述: 完成类似QQ群聊的设计。模仿QQ的登录方式,输入QQ号码和密码,登录验证成功后进入聊天界面。为简化设计,聊天内容由服务器向所有在线用户转发,用户之间的一对一私聊请见本章的实验拓展。客户机与服务器之间的通信采用UDP协议。作品功能演示如下: 打开chap05目录下的begin子文件夹,会看到里面包含两个jar文件,如图5.1所示,QQServer.jar是服务器程序,QQClient.jar是客户机程序。
图5.1chap05的begin目录
首先运行服务器程序,单击初始界面上的“启动服务器”按钮,服务器运行状态如图5.2所示。此时服务器工作于localhost主机的50000端口,根据监控面板的提示,服务器此时处于侦听状态,等待新客户机的到来。
图5.2聊天室服务器启动后的初始界面
下面启动三个客户机联合测试。双击QQClient.jar,客户机登录界面如图5.3所示。这里用2000账号登录,本章还可以用3000、8000这两个账号登录。密码随意。账号与密码不能为空,否则会给出错误提示。在第7章,将结合数据库技术、**通信技术实现用户的**注册和登录设计。