Java Socket实现的传输对象功能示例
本文实例讲述了JavaSocket实现的传输对象功能。分享给大家供大家参考,具体如下:
前面两篇文章介绍了怎样建立JavaSocket通信,这里说一下怎样使用JavaSocket来传输对象。
首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少的了,如下:
packagecom.googlecode.garbagecan.test.socket.sample3;
publicclassUserimplementsjava.io.Serializable{
privatestaticfinallongserialVersionUID=1L;
privateStringname;
privateStringpassword;
publicUser(){
}
publicUser(Stringname,Stringpassword){
this.name=name;
this.password=password;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
对于Server端的代码,代码中分别使用了ObjectInputStream和ObjectOutputStream来接收和发送socket中的InputStream和OutputStream,然后转换成Java对象,如下:
packagecom.googlecode.garbagecan.test.socket.sample3;
importjava.io.*;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.util.logging.Level;
importjava.util.logging.Logger;
publicclassMyServer{
privatefinalstaticLoggerlogger=Logger.getLogger(MyServer.class.getName());
publicstaticvoidmain(String[]args)throwsIOException{
ServerSocketserver=newServerSocket(10000);
while(true){
Socketsocket=server.accept();
invoke(socket);
}
}
privatestaticvoidinvoke(finalSocketsocket)throwsIOException{
newThread(newRunnable(){
publicvoidrun(){
ObjectInputStreamis=null;
ObjectOutputStreamos=null;
try{
is=newObjectInputStream(newBufferedInputStream(socket.getInputStream()));
os=newObjectOutputStream(socket.getOutputStream());
Objectobj=is.readObject();
Useruser=(User)obj;
System.out.println("user:"+user.getName()+"/"+user.getPassword());
user.setName(user.getName()+"_new");
user.setPassword(user.getPassword()+"_new");
os.writeObject(user);
os.flush();
}catch(IOExceptionex){
logger.log(Level.SEVERE,null,ex);
}catch(ClassNotFoundExceptionex){
logger.log(Level.SEVERE,null,ex);
}finally{
try{
is.close();
}catch(Exceptionex){}
try{
os.close();
}catch(Exceptionex){}
try{
socket.close();
}catch(Exceptionex){}
}
}
}).start();
}
}
Client也和Server端类似,同样使用ObjectOutputStream和ObjectInputStream来处理,如下:
packagecom.googlecode.garbagecan.test.socket.sample3;
importjava.io.BufferedInputStream;
importjava.io.IOException;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.net.Socket;
importjava.util.logging.Level;
importjava.util.logging.Logger;
publicclassMyClient{
privatefinalstaticLoggerlogger=Logger.getLogger(MyClient.class.getName());
publicstaticvoidmain(String[]args)throwsException{
for(inti=0;i<100;i++){
Socketsocket=null;
ObjectOutputStreamos=null;
ObjectInputStreamis=null;
try{
socket=newSocket("localhost",10000);
os=newObjectOutputStream(socket.getOutputStream());
Useruser=newUser("user_"+i,"password_"+i);
os.writeObject(user);
os.flush();
is=newObjectInputStream(newBufferedInputStream(socket.getInputStream()));
Objectobj=is.readObject();
if(obj!=null){
user=(User)obj;
System.out.println("user:"+user.getName()+"/"+user.getPassword());
}
}catch(IOExceptionex){
logger.log(Level.SEVERE,null,ex);
}finally{
try{
is.close();
}catch(Exceptionex){}
try{
os.close();
}catch(Exceptionex){}
try{
socket.close();
}catch(Exceptionex){}
}
}
}
}
最后测试上面的代码,首先运行Server类,然后运行Client类,就可以分别在Server端和Client端控制台看到接收到的User对象实例了。
更多关于java相关内容感兴趣的读者可查看本站专题:《JavaSocket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。