?? serverimpl.java
字號:
package org.com.gather;
import java.net.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import org.com.gather.exception.*;
public class ServerImpl implements Server{
private Properties pro = null;
private Log log = null;
private BackUp back = null;
private DB db = null;
public ServerImpl(Properties pro){
this.pro = pro;
}
public void start(){
try{
ServerSocket serverSocket = new ServerSocket(new Integer(pro.getProperty("port")).intValue());
//通過多線程,實(shí)現(xiàn)時(shí)刻監(jiān)聽客戶端
while(true){
Socket socket = serverSocket.accept();
Thread t = new ServerThread(socket,db,log,back);
t.start();
}
}catch(Exception e){
e.printStackTrace();
}
}
public void setLog(Log log){
this.log = log;
}
public void setBackUp(BackUp back){
this.back = back;
}
public void setTestDB(DB db){
this.db = db;
}
}
class ServerThread extends Thread{
private Socket socket = null;
private DB db = null;
private Log log = null;
private BackUp back = null;
private InputStream is = null;
private ObjectInputStream ois = null;
private Collection col = null;
public ServerThread(Socket socket,DB db,Log log,BackUp back){
this.socket = socket;
this.db = db;
this.log = log;
this.back = back;
}
public void run(){
System.out.println("服務(wù)器正在接收數(shù)據(jù)...");
try{
is = socket.getInputStream();
log.writeDebug("成功獲得輸入流;");
}catch(IOException e){
e.printStackTrace();
log.writeError("成功獲得輸入流;");
}
try{
ois = new ObjectInputStream(is);
}catch(IOException e){
log.writeError("包裝對象流出異常;");
}
//從客戶端接收到數(shù)據(jù)
try{
col = (Collection)ois.readObject();
Collection back_Collection = back.load();
if(!back_Collection.isEmpty()){
col.addAll(back_Collection);
back.clear();
}
try{
db.storeToDB(col);
}catch(SQLException e){
log.writeError("獲取連接異常!");
back.storeForEmpty(col);
log.writeInfo("成功把數(shù)據(jù)備份到serverback;");
}catch(ClassNotFoundException e){
log.writeError(e.getMessage());
}catch(DBException e){
log.writeError("自定義異常被觸發(fā);");
}
}catch(IOException e){
e.printStackTrace();
log.writeError("IO異常 ;");
}catch(ClassNotFoundException e){
e.printStackTrace();
log.writeError("找不到類 ;");
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -