Socket编程
服务端TCPServer
服务端,监听连接,提交线程池 并发处理每个连接
package communication.tcp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
*
* @author wangying
* @version $Id: TcpServer.java, v 0.1 2019-4-19 下午12:09:31 wangying Exp $
*/
public class TCPServer extends Thread {
private static Logger logger = LoggerFactory.getLogger(TCPServer.class);
private ServerSocket server = null;
private volatile boolean closing = false;
// 线程池用于 处理每个客户端连接
private static final ExecutorService pool = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
pool.submit(new TCPServer());
}
@Override
public void run() {
try {
if (!isBound()) {
tryToBind();
}
} catch (IOException e) {
return;
}
while (!closing) {
try {
Socket client = server.accept();
if (logger.isDebugEnabled()) {
logger.debug("server recieve message from " + client.getInetAddress());
}
// 提交监听器线程 来处理客户端的连接
TcpServerListener listener = new TcpServerListener(client);
// listener.setDaemon(true);
pool.submit(listener);
} catch (IOException e) {
if (!closing)
logger.warn("control socket error: ", e);
else {
logger.warn("shutting down listen thread due to shutdown() call");
break;
}
}
}// 结束循环
}
public boolean is