|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先谈谈我对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也是延续着它的拖拽控件的方法,提高速度。 |
|