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){
|
|||
|
//<2F>ͻ<EFBFBD><CDBB>˼<EFBFBD><CBBC><EFBFBD>.
|
|||
|
this.mclient = mclient;
|
|||
|
//<2F><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD>.
|
|||
|
this.socket = socket;
|
|||
|
//<2F><><EFBFBD>ÿͻ<C3BF><CDBB>ζ<EFBFBD><CEB6><EFBFBD>.
|
|||
|
this.client = new Client();
|
|||
|
//<2F><><EFBFBD>ÿͻ<C3BF><CDBB>˵<EFBFBD>ַ.
|
|||
|
client.setAddress(socket.getInetAddress().getHostAddress());
|
|||
|
//<2F><><EFBFBD>ÿͻ<C3BF><CDBB>˶˿<CBB6>.
|
|||
|
client.setPort(String.valueOf(socket.getPort()));
|
|||
|
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־.
|
|||
|
Recordable.record("<22>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>" + client.getAddress() + "<22><>" + client.getPort() + ".");
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <20>ر<EFBFBD>ͨ<EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
**/
|
|||
|
public void close(){
|
|||
|
try {
|
|||
|
if(writer != null)
|
|||
|
writer.close();
|
|||
|
if(reader!=null)
|
|||
|
reader.close();
|
|||
|
if(socket!=null)
|
|||
|
socket.close();
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF>Ŀͻ<C4BF><CDBB><EFBFBD>.
|
|||
|
mclient.remove(client.getAddress() + ":" + client.getPort());
|
|||
|
//<2F><>¼<EFBFBD>Ͽ<EFBFBD><CFBF>ҽӿͻ<D3BF><CDBB><EFBFBD>.
|
|||
|
Recordable.record("<22>ͻ<EFBFBD><CDBB>˶Ͽ<CBB6><CFBF><EFBFBD><EFBFBD>ӣ<EFBFBD>" + client.getAddress() + "<22><>" + 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;
|
|||
|
}
|
|||
|
|
|||
|
}
|