TCP一点东东
package org.upeng.mail.net.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import org.upeng.mail.net.util.AESUtil;
import org.upeng.mail.net.util.NetConfit;
import org.upeng.mail.net.util.NetLoger;
import org.upeng.mail.process.InstructionProcessor;
/**
* <ul>
* <li>Title:[服务器处理类]</li>
* <li>Description: [type of functional description]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public class ServerHandler implements Runnable
{
/** SOCKET */
private Socket socket;
/** 缓冲写入 */
private BufferedWriter bw;
/** 缓冲读入 */
private BufferedReader br;
/** 指令处理缓存 */
private InstructionProcessor processor;
/**
* <ul>
* <li>Description:[构造方法]</li>
* <ul>
*
* @param socket
*/
public ServerHandler(Socket socket)
{
this.socket = socket;
processor = new InstructionProcessor();
}
public void run()
{
try
{
// 创建缓冲读写
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream()));
// 客户端发来的消息
String msg = null;
while (true)
{
msg = readLine();
// 这里是远程商品,发向远程
processor.process(getRemoteIp(), msg);
write(NetConfit.tcp_oparator_success);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
freeSource();
}
}
/**
* <ul>
* <li>Description:[写数据]</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param msg
* @throws IOException
*/
private void write(String msg) throws IOException
{
// 判断写入的消息是否合法
if (msg == null || "".equals(msg))
{
return;
}
// 处理消息,加上部首, 且加密数据,防止非法者抓包
String encodeMsg = NetConfit.tcp_msg_head + msg;
encodeMsg = AESUtil.encrypt(encodeMsg, NetConfit.password);
// 写数据
bw.write(encodeMsg);
bw.newLine();
bw.flush();
// 记录日志
NetLoger.logSnd(getRemoteIp(), socket.getPort(), msg);
}
/**
* <ul>
* <li>Description:[读数据]</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
* @throws IOException
*/
private String readLine() throws IOException
{
String decodeMsg = "";
// 读取一行数据,并判断数据是否非法
String endcodeMsg = br.readLine();
if (endcodeMsg == null || "".equals(endcodeMsg))
{
return decodeMsg;
}
// 解密数据,并判断数据是否是合法的
decodeMsg = AESUtil.decrypt(endcodeMsg, NetConfit.password);
if (decodeMsg.length() < 5
|| !NetConfit.tcp_msg_head.equals(decodeMsg.substring(0, 4)))
{
// 如果消息不合法
return "";
}
else
{
decodeMsg = decodeMsg.substring(4);
}
// 写入日志
NetLoger.logRsv(getRemoteIp(), socket.getPort(), decodeMsg);
// 返回结果
return decodeMsg;
}
/**
* <ul>
* <li>Description:[得到远程IP]</li>
* <li>Created by [Huyvanpull] [2011-9-7]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
private String getRemoteIp()
{
return socket.getInetAddress().getHostAddress().toString();
}
/**
* <ul>
* <li>Description:[释放资源]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void freeSource()
{
try
{
// 释放BufferWriter
if (bw != null)
{
bw.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
try
{
// 释放BufferReader
if (br != null)
{
br.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
try
{
// 释放Socket
if (socket != null)
{
socket.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
2.import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import org.upeng.mail.net.util.AESUtil;
import org.upeng.mail.net.util.NetConfit;
import org.upeng.mail.net.util.NetLoger;
import org.upeng.mail.process.InstructionProcessor;
/**
* <ul>
* <li>Title:[服务器处理类]</li>
* <li>Description: [type of functional description]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public class ServerHandler implements Runnable
{
/** SOCKET */
private Socket socket;
/** 缓冲写入 */
private BufferedWriter bw;
/** 缓冲读入 */
private BufferedReader br;
/** 指令处理缓存 */
private InstructionProcessor processor;
/**
* <ul>
* <li>Description:[构造方法]</li>
* <ul>
*
* @param socket
*/
public ServerHandler(Socket socket)
{
this.socket = socket;
processor = new InstructionProcessor();
}
public void run()
{
try
{
// 创建缓冲读写
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream()));
// 客户端发来的消息
String msg = null;
while (true)
{
msg = readLine();
// 这里是远程商品,发向远程
processor.process(getRemoteIp(), msg);
write(NetConfit.tcp_oparator_success);
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
freeSource();
}
}
/**
* <ul>
* <li>Description:[写数据]</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @param msg
* @throws IOException
*/
private void write(String msg) throws IOException
{
// 判断写入的消息是否合法
if (msg == null || "".equals(msg))
{
return;
}
// 处理消息,加上部首, 且加密数据,防止非法者抓包
String encodeMsg = NetConfit.tcp_msg_head + msg;
encodeMsg = AESUtil.encrypt(encodeMsg, NetConfit.password);
// 写数据
bw.write(encodeMsg);
bw.newLine();
bw.flush();
// 记录日志
NetLoger.logSnd(getRemoteIp(), socket.getPort(), msg);
}
/**
* <ul>
* <li>Description:[读数据]</li>
* <li>Created by [Huyvanpull] [2011-9-5]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
* @throws IOException
*/
private String readLine() throws IOException
{
String decodeMsg = "";
// 读取一行数据,并判断数据是否非法
String endcodeMsg = br.readLine();
if (endcodeMsg == null || "".equals(endcodeMsg))
{
return decodeMsg;
}
// 解密数据,并判断数据是否是合法的
decodeMsg = AESUtil.decrypt(endcodeMsg, NetConfit.password);
if (decodeMsg.length() < 5
|| !NetConfit.tcp_msg_head.equals(decodeMsg.substring(0, 4)))
{
// 如果消息不合法
return "";
}
else
{
decodeMsg = decodeMsg.substring(4);
}
// 写入日志
NetLoger.logRsv(getRemoteIp(), socket.getPort(), decodeMsg);
// 返回结果
return decodeMsg;
}
/**
* <ul>
* <li>Description:[得到远程IP]</li>
* <li>Created by [Huyvanpull] [2011-9-7]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
private String getRemoteIp()
{
return socket.getInetAddress().getHostAddress().toString();
}
/**
* <ul>
* <li>Description:[释放资源]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void freeSource()
{
try
{
// 释放BufferWriter
if (bw != null)
{
bw.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
try
{
// 释放BufferReader
if (br != null)
{
br.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
try
{
// 释放Socket
if (socket != null)
{
socket.close();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
package org.upeng.mail.net.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.upeng.mail.net.util.NetConfit;
import org.upeng.mail.net.util.NetLoger;
/**
* <ul>
* <li>Title:[TCPServer]</li>
* <li>Description: [TCP网络服务]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public class TCPServer extends Thread
{
/** TCP服务器实例 */
private static TCPServer tcpServer = new TCPServer();
/** server socket */
private ServerSocket serverSocket;
private ExecutorService executorService;
/** 端口号 */
private int port;
/** 是否启动成功(如端口已经被占用,就不能启动成功) */
private boolean isStoped = false;
/**
* <ul>
* <li>Description:[构造方法]</li>
* <ul>
*/
private TCPServer()
{
startServer();
}
/**
* <ul>
* <li>Description:[得到单态的实例]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
public static TCPServer getInstance()
{
return tcpServer;
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
public void run()
{
this.service();
}
/**
* <ul>
* <li>Description:[服务]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void service()
{
// 测试信息
StringBuffer debugInfo = new StringBuffer();
while (!isStoped)
{
Socket socket = null;
try
{
// 等等连接
socket = serverSocket.accept();
// 测试信息
debugInfo.delete(0, debugInfo.length());
debugInfo.append("服务器与");
debugInfo.append(socket.getRemoteSocketAddress().toString());
debugInfo.append("建立连接");
NetLoger.log(debugInfo.toString());
// 服务器处理线程
executorService.execute(new ServerHandler(socket));
}
catch (SocketTimeoutException stex)
{}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/**
* <ul>
* <li>Description:[服务器是否启动成功]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
public boolean isStopeded()
{
return isStoped;
}
/**
* <ul>
* <li>Description:[启动服务器]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void startServer()
{
// 设置端口,是测试模式和正式模式
this.port = NetConfit.localPort;
try
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(30000);
executorService = Executors.newCachedThreadPool();
NetLoger.log("TCP服务器启动成功.");
this.start();
}
catch (Exception ex)
{
isStoped = true;
NetLoger.log("TCP服务器启动失败.");
ex.printStackTrace();
}
}
/**
* <ul>
* <li>Description:[关闭服务器]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
@SuppressWarnings("deprecation")
public void shutDown()
{
try
{
this.executorService.shutdown();
this.executorService.shutdownNow();
this.isStoped = true;
serverSocket.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
NetLoger.log("关闭socket服务器");
}
public static void main(String[] args) throws IOException
{
TCPServer.getInstance();
System.out.println(TCPServer.getInstance().isStoped);
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.upeng.mail.net.util.NetConfit;
import org.upeng.mail.net.util.NetLoger;
/**
* <ul>
* <li>Title:[TCPServer]</li>
* <li>Description: [TCP网络服务]</li>
* <li>Copyright 2009 Upengs Co., Ltd.</li>
* <li>All right reserved.</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @version 1.0
*/
public class TCPServer extends Thread
{
/** TCP服务器实例 */
private static TCPServer tcpServer = new TCPServer();
/** server socket */
private ServerSocket serverSocket;
private ExecutorService executorService;
/** 端口号 */
private int port;
/** 是否启动成功(如端口已经被占用,就不能启动成功) */
private boolean isStoped = false;
/**
* <ul>
* <li>Description:[构造方法]</li>
* <ul>
*/
private TCPServer()
{
startServer();
}
/**
* <ul>
* <li>Description:[得到单态的实例]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
public static TCPServer getInstance()
{
return tcpServer;
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
public void run()
{
this.service();
}
/**
* <ul>
* <li>Description:[服务]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void service()
{
// 测试信息
StringBuffer debugInfo = new StringBuffer();
while (!isStoped)
{
Socket socket = null;
try
{
// 等等连接
socket = serverSocket.accept();
// 测试信息
debugInfo.delete(0, debugInfo.length());
debugInfo.append("服务器与");
debugInfo.append(socket.getRemoteSocketAddress().toString());
debugInfo.append("建立连接");
NetLoger.log(debugInfo.toString());
// 服务器处理线程
executorService.execute(new ServerHandler(socket));
}
catch (SocketTimeoutException stex)
{}
catch (Exception e)
{
e.printStackTrace();
}
}
}
/**
* <ul>
* <li>Description:[服务器是否启动成功]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*
* @return
*/
public boolean isStopeded()
{
return isStoped;
}
/**
* <ul>
* <li>Description:[启动服务器]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
private void startServer()
{
// 设置端口,是测试模式和正式模式
this.port = NetConfit.localPort;
try
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(30000);
executorService = Executors.newCachedThreadPool();
NetLoger.log("TCP服务器启动成功.");
this.start();
}
catch (Exception ex)
{
isStoped = true;
NetLoger.log("TCP服务器启动失败.");
ex.printStackTrace();
}
}
/**
* <ul>
* <li>Description:[关闭服务器]</li>
* <li>Created by [Huyvanpull] [2011-9-6]</li>
* <li>Midified by [modifier] [modified time]</li>
* </ul>
*/
@SuppressWarnings("deprecation")
public void shutDown()
{
try
{
this.executorService.shutdown();
this.executorService.shutdownNow();
this.isStoped = true;
serverSocket.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
NetLoger.log("关闭socket服务器");
}
public static void main(String[] args) throws IOException
{
TCPServer.getInstance();
System.out.println(TCPServer.getInstance().isStoped);
}
}