基于Socket网络通讯论文.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IBM Confidential * Nagle?算法(根据其作者?John?Nagle?命名)是一种?TCP?拥塞控制算法,目的是为了减少发送到网络上的小分组的数量. 从而提高发送和接收方的传输效率,减轻传输发送方的资源消耗! IBM Confidential * IBM Confidential * 基于socket的典型通信模式 ①客户程序按约定的主机与端 口发送请求,申请建立连接。 ②服务程序创建一个新的socket, 并将新端口通知客户端, 两者在新端口建立连接。 * * 基于socket的客户程序编程模型 ①打开一个socket; 通过指定主机(主机名或InetAddress)和端口构造一个socket。 ②打开该socket的一个输入流和一个输出流; ? 调用Socket类的getInputStream()和getOutputStream()。 ③ 依照客户程序与服务程序约定的协议读输入流或写输出流; 不同客户程序的编写复杂度主要体现在这一步骤。 ④关闭输入流和输出流;关闭socket。 ? 最后一步的关闭次序不可搞错了! * * 基于socket的服务程序编程模型 ①打开一个socket; 通过指定监听的端口号创建一个ServerSocket实例。该socket的功能是监听客户程序的连接请求,又称监听socket。 ②执行监听socket的accept()方法; 该方法阻塞(block),直至有客户请求连接到服务程序。该方法执行后返回一个新的客户socket用于专门处理该客户连接。 ③打开客户socket的一个输入流和一个输出流; ? 用Socket类的getInputStream()和getOutputStream()。 ④ 依照预先约定的协议读输入流或写输出流; 不同服务程序的编写复杂度体现在这一步骤。当然,服务程序还须更多地考虑可伸缩性、安全性、可靠性等问题。 ⑤依次关闭:输入流和输出流、客户socket、监听socket。 不可搞错了! * * 不足之处 上述程序只能处理一个客户请求。 一旦服务程序的accept()方法被调用,无人再监听该端口。 ? 导致后续的客户连接请求失败。 代码演示 启动2个客户程序 最简单的改进途径是在处理完连接后再次循环执行accept()。 * * 仍有问题 即使改进为循环执行accept(),程序在同一时刻只能处理一个客户连接。 一旦服务程序的accept()方法被调用,无人再监听该端口。 ? 导致后续的客户连接请求只能排队,甚至被丢弃。 * * 多线程服务程序 ? 解决问题的途径 使用多线程编写服务程序! 实际代码演示 ? 运行eclipse程序并启动两份客户程序,观察第二个客户程序进程。 * * 更高可伸缩性的服务程序 每请求线程模型:上述程序允许无限的客户连接。 ? 容易导致服务程序因创建过多的线程而崩溃。 一个简单的改进是限制一个最大的客户连接数目。 更通用的改进方式:使用线程池模型和连接池。 ? 每一个池设置初始值、最小值和最大值! * * 设置socket特性 ? 设置超时约束 在socket应用中的术语为SO_TIMEOUT。 ?可用于Socket的read()和write()方法。 ?也可用于ServerSocket的accept()方法。 ?还用于DatagramSocket的read()和write()方法。 ?如果操作完成前已超时,则抛出InterruptedIOException异常。 ... serverSocket.setSoTimeout(2 * 1000); // 调用getSoTimeout()方法可获取关于SO_TIMEOUT的设置 while (!shutdown) { try {Socket client = serverSocket.accept();handleClient(client); } catch (InterruptedIOException exc) {} } // 根据需要决定是否退出服务 ... * * ? 立即发送数据包 在socket应用中的术语为TCP_NODELAY。 ?用于关闭Nagle算法。 Nagle算法延迟小块数据的发送,积累至某一程度后才一起发送。 ? 该算法可防止大量小数据包引起的网络负载过重。 ?

文档评论(0)

wq640326 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档