socket通信實現util包類實現
public class SocketThread extends Thread {
public void run() {
while (true) {
// log4j
Logger log = (Logger) LogManager.getLogger(SocketThread.class);
// 標識服務信息
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
ServerSocket ss;// socket服務監聽對象
Socket socket;// 獲取監聽得到的結果
BufferedReader in;// 輸入流
PrintWriter out;// 輸出流
try {
// 設置監聽的端口,並實例監聽對象
ss = new ServerSocket(SocketConstants.SOCKET_PORT_NO_EC);
while (true) {
// 開始監聽,若沒有客戶端請求則線程一直停留在這里等待請求,
// 一旦就有請求,就獲取監聽到的對象
socket = ss.accept();
InputStream sis = socket.getInputStream();// socket服務獲取的輸入流
// 等待讀取狀態
// 大於零為獲取完畢
while (sis.available() <= 0)
System.out.println("inputStream is waitting...");
in = new BufferedReader(new InputStreamReader(sis));// 獲取輸入
String line = "";// 監聽到的字符串
// 讀數據
while (in.ready()) {
line += in.readLine();
}
// 記錄下獲取到的字符串流
log.warn("client request is :" + line);
out = new PrintWriter(socket.getOutputStream(), true);// 構建輸出
// 輸出
out.println("server response " + sdf.format(new Date()));
// 關閉當前請求對象
out.close();
in.close();
socket.close();
}
} catch (IOException e) {
String msg = "\n" + e.getMessage();
for (StackTraceElement ste : e.getStackTrace()) {
msg += "\n" + ste.getClassName() + "-" + ste.getFileName() + "-" + ste.getMethodName() + "-" + ste.getLineNumber();
}
log.fatal(msg);
} catch (Exception ex) {
String msg = "\n" + ex.getMessage();
for (StackTraceElement ste : ex.getStackTrace()) {
msg += "\n" + ste.getClassName() + "-" + ste.getFileName() + "-" + ste.getMethodName() + "-" + ste.getLineNumber();
}
log.fatal(msg);
}
}
}
}