1:选择或者创建一个新的套接字。(可以参看sun´s的"创建一个典型的套接字")。
2:创建一个服务器端的套接字
3:创建一个rmiclientsocketfactory
4:创建一个rmiserversocketfactory
5:创建一个继承了unicastremoteobjec的远程对象,从而使用新的factories
根据这一大致的想法,我们来看每一步如何具体的实现。
步骤1: 创建zipsocket
由于要进行zip压缩,我们重新创建这样的套接字
import java.io.inputstream;
import java.io.outputstream;
import java.util.zip.zipinputstream;
import java.util.zip.zipoutputstream;
import java.net.socket;
public class zipsocket extends socket {
private inputstream in;
private outputstream out;
public zipsocket() { super(); }
public zipsocket(string host, int port) throws ioexception {
super(host, port);
}
public inputstream getinputstream() throws ioexception {
if (in == null) {
in = new zipinputstream(super.getinputstream());
}
return in;
}
public outputstream getoutputstream() throws ioexception {
if (out == null) {
out = new zipoutputstream(super.getoutputstream());
}
return out;
}
public synchronized void close() throws ioexception {
outputstream o = getoutputstream();
o.flush();
super.close();
}
}
|
步骤2: 创建zipserversocket
import java.net.serversocket;
import java.net.socket;
import java.io.ioexception
public class zipserversocket extends serversocket{
public zipserversocket(int port) throws ioexception {
super(port);
}
public socket accept() throws ioexception {
socket socket = new zipsocket();
implaccept(socket);
return socket;
}
}
|
步骤3:创建zipclientsocketfactory
客户端的factory的创建必须遵循以下的形式:
import java.io.ioexception;
import java.io.serializable;
import java.net.socket;
import java.rmi.server.rmiclientsocketfactory;
public class zipclientsocketfactory
implements rmiclientsocketfactory, serializable {
public socket createsocket(string host, int port) throws ioexception {
zipsocket socket = new zipsocket(host, port);
return socket;
}
}
|
步骤4:创建zipserversocketfactory
import java.io.ioexception;
import java.io.serializable;
import java.net.serversocket;
import java.rmi.server.rmiserversocketfactory;
public class zipserversocketfactory
implements rmiserversocketfactory, serializable {
public serversocket createserversocket(int port) throws ioexception {
zipserversocket server = new zipserversocket(port);
return server;
}
}
|
步骤5: 创建一个继承了unicastremoteobjec的远程对象,从而使用新的factories.
public class yourrmiobject extends unicastremoteobject {
public yourremoteobject( int port ) {
super( port, new zipclientsocketfactory(), new zipserversocketfactory() );
}
// 剩下的是你自己的程序实现
}
|
现在你的通信数据得到了压缩.