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 mclient; public MultiSocket(Socket socket, Map 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; } }