了解下JAVA的Java收集编程从进门到精晓(18):Socket类的getter和setter办法(2) ...
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。2、用于取得和设置Socket选项的getter和setter办法
Socket选择能够指定Socket类发送和承受数据的体例。在JDK1.4中共有8个Socket选择能够设置。这8个选项都界说在java.net.SocketOptions接口中。界说以下:
public final static int TCP_NODELAY = 0x0001;
public final static int SO_REUSEADDR = 0x04;
public final static int SO_LINGER = 0x0080;
public final static int SO_TIMEOUT = 0x1006;
public final static int SO_SNDBUF = 0x1001;
public final static int SO_RCVBUF = 0x1002;
public final static int SO_KEEPALIVE = 0x0008;
public final static int SO_OOBINLINE = 0x1003;
风趣的是,这8个选项除第一个没在SO前缀外,其他7个选项都以SO作为前缀。实在这个SO就是SocketOption的缩写;因而,在Java中商定一切以SO为前缀的常量都暗示Socket选项;固然,也有破例,如TCP_NODELAY。在Socket类中为每个选项供应了一对get和set办法,分离用来取得和设置这些选项。
1.TCP_NODELAY
public boolean getTcpNoDelay() throws SocketException
public void setTcpNoDelay(boolean on) throws SocketException
在默许情形下,客户端向服务器发送数据时,会依据数据包的巨细决意是不是当即发送。当数据包中的数据很少时,如只要1个字节,而数据包的头却有几十个字节(IP头+TCP头)时,体系会在发送之前先将较小的包兼并到软年夜的包后,一同将数据发送进来。在发送下一个数据包时,体系会守候服务器对前一个数据包的呼应,当收到服务器的呼应后,再发送下一个数据包,这就是所谓的Nagle算法;在默许情形下,Nagle算法是开启的。
这类算法固然能够无效地改良收集传输的效力,但关于收集速率对照慢,并且对完成性的请求对照高的情形下(如游戏、Telnet等),利用这类体例传输数据会使得客户端有分明的停留征象。因而,最好的办理计划就是必要Nagle算法时就利用它,不必要时就封闭它。而利用setTcpToDelay恰好能够满意这个需求。当利用setTcpNoDelay(true)将Nagle算法封闭后,客户端每发送一次数据,不管数据包的巨细城市将这些数据发送进来。
2.SO_REUSEADDR
public boolean getReuseAddress() throws SocketException
public void setReuseAddress(boolean on) throws SocketException
经由过程这个选项,可使多个Socket对象绑定在统一个端口上。实在如许做并没有多粗心义,但当利用close办法封闭Socket毗连后,Socket对象所绑定的端口其实不必定即刻开释;体系偶然在Socket毗连封闭才会再确认一下是不是有由于提早面未抵达的数据包,这完整是在底层处置的,也就是说对用户是通明的;因而,在利用Socket类时完整不会感到到。
这类处置机制关于随机绑定端口的Socket对象没有甚么影响,但关于绑定在流动端口的Socket对象便可能会抛出“Addressalreadyinuse:JVM_Bind”破例。因而,利用这个选项能够制止个破例的产生。
packagemynet;
import java.net.*;
import java.io.*;
public classTest
{
public static void main(String[] args)
{
Socket socket1 = new Socket();
Socket socket2 = new Socket();
try
{
socket1.setReuseAddress(true);
socket1.bind(new InetSocketAddress("127.0.0.1", 88));
System.out.println("socket1.getReuseAddress():"
+ socket1.getReuseAddress());
socket2.bind(new InetSocketAddress("127.0.0.1", 88));
}
catch (Exception e)
{
System.out.println("error:" + e.getMessage());
try
{
socket2.setReuseAddress(true);
socket2.bind(new InetSocketAddress("127.0.0.1", 88));
System.out.println("socket2.getReuseAddress():"
+ socket2.getReuseAddress());
System.out.println("端口88第二次绑定乐成!");
}
catch (Exception e1)
{
System.out.println(e.getMessage());
}
}
}
}
<p>
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 是一种将安全性(Security)列为第一优先考虑的语言 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]