Java API主要的网络包:java.net ; java.rmi ; org.omg.* ; JavaMail ; Java servlet
对象持久性和对象序列化:对象持久化可以在JVM之前转移,不管这些JVM是否位于同一台机器上还是在远程机器上
TCP 通过可靠的递交和定序,在支持双向通信的客户和服务器之间提供可靠的字节通信
套接字选项:so_keepalive,so_revbuf,so_sndbuf,so_linger,tcp_nodelay,so_timeout,
多线程应用程序:
1,创建线程时并没有调用run() 方法,只有当调用start() 方法启动线程时,run() 方法才被调用。
如果只有守护线程在运行,那么JVM将会自动终止。
2,中断线程可能会唤起其他线程,
3,Thread.yield()让出CPU时间
sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。
当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它 synchronized数据可被别的线程使用。
waite()和notify()因为会对对象的“锁标 志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized 函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生 IllegalMonitorStateException的异常 。
同步:方法级别的和程序块级别的同步
线程组
数据包发送接收
serversocket和socket的区别
ServerSocket用于绑定端点,提供服务,并接受连接请求,如果写服务器一定要用到的 Socket就是普通的连接套接字,做客户端要用到,设计服务器的时候也要用到。服务套接字accept之后返回的是Socket对象
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
Socket和 ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应 用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户 端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
重要的Socket API:
java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。
.Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
.getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。
.getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
GET请求方式 带两个参数:资源的路径以及使用的HTTP版本
POST请求方法: 客户HTTP POST请求,首部,实体主体
客户请求首部域:“Cookie”域,“From”域,“If-Modified-Since”域,“Referer”域,“User-Agent”域
cookie的基本思想是避开HTTP的非状态性
在面向对象的系统中,通过象对象传递一个指向事件源的对象引用(监听者)实现回掉。
java rmi
写道
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class PacketSendDemo {
public static void main(String args[]){
int argc=args.length;
if(argc != 1){
System.out.println("Syntax :");
System.out.println("java PacketSendDemo hostname");
return;
}
String hostname=args[0];
try{
System.out.println("Binding to a local port");
DatagramSocket socket=new DatagramSocket();
System.out.println("Bound to local port"+ socket.getLocalPort());
ByteArrayOutputStream bout =new ByteArrayOutputStream();
PrintStream pout=new PrintStream(bout);
pout.print("Greetings!");
byte[] barray=bout.toByteArray();
DatagramPacket packet=new DatagramPacket(barray, barray.length);
System.out.println("Looking up hostname" + hostname);
InetAddress remote_addrAddress = InetAddress.getByName(hostname);
System.out.println("Hostname resolved as "+ remote_addrAddress.getHostAddress());
packet.setAddress(remote_addrAddress); //可以看出数据报中含有目的IP端口以及数据
packet.setPort(2000); // 数据报发送不需要建立收发之间的连接
socket.send(packet);
System.out.println("Packet sent!");
}catch (UnknownHostException uhe) {
// TODO: handle exception
System.err.println("Can't find host"+ hostname);
}catch (IOException ioe) {
System.err.println("Error -" +ioe);
// TODO: handle exception
}
}
}
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class PacketRecevieDemo {
public static void main( String args[]){
try{
System.out.println("Binding to local prot 2000");
DatagramSocket socket=new DatagramSocket(2000);
System.out.println("Bound to local port" + socket.getLocalPort());
DatagramPacket packet= new DatagramPacket(new byte[256], 256);
socket.receive(packet);
InetAddress remote_addr=packet.getAddress();
System.out.println("Sent by" + remote_addr.getHostAddress());
System.out.println("Sent from :" + packet.getPort());
ByteArrayInputStream bin=new ByteArrayInputStream(packet.getData());
for (int i=0;i<packet.getLength();i++){
int data=bin.read();
if(data==-1){
break;
}
else
System.out.println((char)data);
}
socket.close();
}catch (IOException ioe) {
System.err.println("Error -" +ioe);
// TODO: handle exception
}
}
}