grgw_wdcj_java/wsdjc/.svn/pristine/b4/b4904d329f31dd0d729d3a6ccc0...

94 lines
2.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}