您的位置:首页 > 编程语言 > Java开发

java之Socket多线程传递对象

2013-12-06 16:29 465 查看
服务器端利用线程池回复客户端:

publicclassServerimplementsRunnable{

privatefinalServerSocketserver;
privatefinalExecutorServicepool;

publicServer(intport,intpoolSize)throwsIOException{
this.server=newServerSocket(port);
this.pool=Executors.newFixedThreadPool(poolSize);
}

publicvoidrun(){
while(true){
Socketsocket;
try{
socket=this.server.accept();
pool.execute(newServerRepleyLines(socket));
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

}

}


ServerRepleyLines类具体代码,里面用到的数据类可以暂不考虑:


publicclassServerRepleyLinesextendsThread{

privateDBHelperhelper;
privateSocketclient;

publicServerRepleyLines(Socketclient){
this.client=client;
this.helper=newDBHelper();
}

@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
try{
ObjectInputStreamfin=newObjectInputStream(
newBufferedInputStream(this.client.getInputStream()));
try{
TicketInfoqa=(TicketInfo)fin.readObject();
System.out.println(qa.getStarting_station());
if(qa.getType()==2){
LineInfoslines=this.helper.getAllLineInfos(
qa.getStarting_station(),qa.getTerminal_station(),qa.getDate_time().toString());
ObjectOutputStreamfout=newObjectOutputStream(
client.getOutputStream());
fout.writeObject(lines);
fout.flush();
}
fin.close();
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

}



客户端Socket传输对象:

publicLineInfossendAndGetLinesInfo(TicketInfoticket){
Socketsocket=this.CreateASocket(2);
try{
ObjectOutputStreamfout=newObjectOutputStream(
socket.getOutputStream());
fout.writeObject(ticket);
fout.flush();
LineInfoslines=null;
ObjectInputStreamfin=newObjectInputStream(
newBufferedInputStream(socket.getInputStream()));
try{
lines=(LineInfos)fin.readObject();
fin.close();
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
fout.close();
returnlines;

}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnnull;
}


核心代码就这些:

调用开启线程:Serverserver=newServer2(6668,3);  server.start();


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: