快速业务通道

Java网络编程之传输控制协议 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

解决的方法是Nagle算法,它规定TCP在一个时刻只能发送一个数据报。当每 个IP数据报得到肯定应答的时候,才能发送新的队列中包含数据的数据报。它限 制了数据报头部信息消耗的带宽总量,但是有不太重要的代价--网络延迟。因为 数据被排队了,它们不是立即发送的,因此需要快速响应时间的系统(例如X- Windows或telnet)的速度被减慢了。禁止Nagle算法可能提高性能,但是如果被 太多的客户端使用,网络性能也会降低。

可以通过调用Socket.setTcpNoDelay(boolean state)方法激活或禁止Nagle 算法。例如,为了禁止该算法,可能使用下面的代码:

// 为了得到更快的响应时间禁止Nagle算法

someSocket.setTcpNoDelay(false);

为了获取Nagle算法的状态和TCP_NODELAY标识符,可以使用 Socket.getTcpNoDelay()方法:

// 得到TCP_NODELAY标识符的状态

boolean state = someSocket.getTcpNoDelay();

⑹ SO_TIMEOUT套接字操作

超时设置选项是最有用的套接字选项。在默认情况下,I/O操作(基于文件的 或基于网络的)都是阻塞的操作。试图从InputStream读取数据将无限期等待直 到输入到达。如果输入永远没有到达,应用程序将停止并且在大多数情况下变得 不可用(除非使用了多线程)。用户不喜欢不能响应的应用程序,他们认为这类 应用程序行为很讨厌。更牢固的应用程序应该预料到这类问题并采取正确的操作 。

注意

在测试期间的本地内部网环境中网络问题很少,但是在Internet上,应用程 序停止是很可能的。服务器应用程序并没有免疫力--服务器也使用Socket类连接 客户端,并且很容易停止。因为这个原因,所有的应用程序(无论是客户端或者 服务器)都应该温和地处理网络超时的问题。

当激活SO_TIMEOUT选项时,任何向套接字的InputStream的读取请求都会启动 一个计时器。当数据没有按时到达并且计时器超期的时候,就产生 java.io.InterruptedIOException异常,你可以捕捉该异常。接着就是应用程序 开发者的工作了--可以再次尝试、通知用户或取消连接。可以调用Socket. setSoTimeout(int)方法控制计时器的持续时间,它的参数是等待数据的毫秒数 。例如,为了设置5秒钟超时,将使用下面的代码:

// 设置5秒钟超时

someSocket.setSoTimeout ( 5 * 1000 );

激活设置后,任何读取数据的企图都可能产生InterruptedIOException异常 ,该异常扩展自java.io.IOException类。由于读取数据的企图可能已经产生了 IOException异常,所以不需要更多的代码来处理该异常了--但是,有些应用程 序可能希望逐步捕捉与超时设置相关地异常,在这种情况下可能需要添加另外地 异常处理代码:

try { Socket s = new Socket (...); s.setSoTimeout ( 2000 );// 执行一些读取操作 } catch (InterruptedIOException iioe) { timeoutFlag = true; // 执行一些操作,例如设置标识符 } catch (IOException ioe) { System.err.println ("IO error " + ioe); System.exit(0); }

为了得到TCP计时器的长度,可以使用Socket.getSoTimeout()方法,它返回 一个整型值。如果返回值为零表明超时设定被禁止了,任何读取操作将无限期阻 塞。

// 查看超时设定是否为零

if ( someSocket.getSoTimeout() == 0) someSocket.setSoTimeout (500);

Java网络编程之传输控制协议(7)

时间:2010-12-16 天极 陶刚

五、建立TCP客户端

讨论了套接字类的功能后,我们将分析一个完整的TCP客户端程序。此处我们 将看到的客户端程序是一个daytime客户端,它连接到一个daytime服务器程序以 读取当前的日期和时间。建立套接字连接并读取信息是一个相当简单的过程,只 需要少量的代码。默认情况下daytime服务运行在13端口上。并非每台计算机都 运行了daytime服务器程序,但是Unix服务器

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号