94 lines
2.2 KiB
Plaintext
94 lines
2.2 KiB
Plaintext
package com.surfbird.socket.server.service;
|
||
|
||
import java.io.IOException;
|
||
import java.io.InputStream;
|
||
import java.io.OutputStream;
|
||
import java.net.Socket;
|
||
import java.util.Map;
|
||
|
||
import com.surfbird.socket.server.bean.Client;
|
||
import com.surfbird.util.convert.DataHandle;
|
||
import com.surfbird.util.convert.Recordable;
|
||
|
||
public class MultiSocket implements Runnable {
|
||
|
||
private int size;
|
||
private byte[] buffer;
|
||
private Client client;
|
||
private Socket socket;
|
||
private InputStream reader;
|
||
private OutputStream writer;
|
||
private Map<String, MultiSocket> mclient;
|
||
|
||
public MultiSocket(Socket socket, Map<String, MultiSocket> mclient){
|
||
//客户端集合.
|
||
this.mclient = mclient;
|
||
//获得长连接监听.
|
||
this.socket = socket;
|
||
//获得客户段对象.
|
||
this.client = new Client();
|
||
//设置客户端地址.
|
||
client.setAddress(socket.getInetAddress().getHostAddress());
|
||
//设置客户端端口.
|
||
client.setPort(String.valueOf(socket.getPort()));
|
||
//记录连接日志.
|
||
Recordable.record("客户端已连接:" + client.getAddress() + ":" + client.getPort() + ".");
|
||
}
|
||
|
||
/**
|
||
* 关闭通信、输出流及输入流对象.
|
||
**/
|
||
public void close(){
|
||
try {
|
||
if(writer != null)
|
||
writer.close();
|
||
if(reader!=null)
|
||
reader.close();
|
||
if(socket!=null)
|
||
socket.close();
|
||
//清除断开的客户端.
|
||
mclient.remove(client.getAddress() + ":" + client.getPort());
|
||
//记录断开乱接客户端.
|
||
Recordable.record("客户端断开连接:" + client.getAddress() + ":" + client.getPort() + ".");
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
private void initialize()throws IOException{
|
||
this.buffer = new byte[1024];
|
||
this.reader = socket.getInputStream();
|
||
this.writer = socket.getOutputStream();
|
||
}
|
||
|
||
public void run() {
|
||
try {
|
||
this.initialize();
|
||
while(true){
|
||
if((size = reader.read(buffer))>=0){
|
||
String receive = new String(buffer, 0, size);
|
||
String analysis = DataHandle.toHexString(buffer, size);
|
||
DataHandle.toParseData(writer, client, receive, analysis, size);
|
||
} else {
|
||
this.close();
|
||
break;
|
||
}
|
||
}
|
||
} catch (IOException e) {
|
||
e.printStackTrace();
|
||
} finally {
|
||
this.close();
|
||
}
|
||
}
|
||
|
||
public Client getClient() {
|
||
return client;
|
||
}
|
||
public Socket getSocket() {
|
||
return socket;
|
||
}
|
||
public OutputStream getWriter() {
|
||
return writer;
|
||
}
|
||
|
||
} |