非阻塞模式的Socket

SocketServer:
package com.hou.blocksocket.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class UnBlockEchoServer {

private int port = 8000;
private ServerSocketChannel serverSocketChannel = null;
private ExecutorService executerService;// 线程池
private static final int maxThreadNum = 4;

public UnBlockEchoServer() {
executerService = Executors.newFixedThreadPool(Runtime.getRuntime()
.availableProcessors()
* maxThreadNum);// 创建一个线程池
try {
serverSocketChannel = ServerSocketChannel.open();// 打开serverSocketChannel
serverSocketChannel.socket().setReuseAddress(true);// 设置该端口号停掉,该端口号可以被顺利的占用
serverSocketChannel.socket().bind(new InetSocketAddress(port));// 服务器绑定端口号
System.out.println("服务器成功启动;端口号=" + port);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 服务方法
*/
public void Service() {
while (true) {
SocketChannel socketChannel = null;
try {
socketChannel = serverSocketChannel.accept();// 等当客户端登陆
executerService.execute(new Handler(socketChannel));// 抛给线程池执行
} catch (Exception e) {
System.out.println("出现异常消息了" + e);
}

}

}

class Handler implements Runnable {// 执行者
private SocketChannel sockerChannel;

public Handler(SocketChannel socketChannel) {
this.sockerChannel = socketChannel;
}

@Override
public void run() {
handle(sockerChannel);// 调用服务
}

public void handle(SocketChannel socketChannel) {
Socket socket = socketChannel.socket();// 得到socket
System.out.println("接受到来自客户端的连接请求=" + socket.getInetAddress() + ":"
+ socket.getPort());
try {
BufferedReader br = this.getReader(socket);
PrintWriter writer = this.getWriter(socket);
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg);
writer.println("你好!收到了你的请求了!!!");
if (msg.equals("88")) {
break;
}

}
} catch (IOException e) {
System.out.println("服务器端出现了异常消息了=" + e);
e.printStackTrace();
} finally {
if (socketChannel != null) {// 关闭socketChannel
try {
socketChannel.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

}

/**
* 得到写者
*
* @param socket
* @return
* @throws IOException
*/
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream out = socket.getOutputStream();
return new PrintWriter(out, true);

}

/**
* 得到读者
*
* @param socket
* @return
* @throws IOException
*/
private BufferedReader getReader(Socket socket) throws IOException {
InputStream in = socket.getInputStream();
return new BufferedReader(new InputStreamReader(in));

}

}



public static void main(String args[]){
new UnBlockEchoServer().Service();

}
}

你可能感兴趣的:(java,.net,socket)