public class MultiThreadServer {
private int port=8821;
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private final int POOL_SIZE=10;//单个CPU线程池大小 public MultiThreadServer() throws IOException{
serverSocket=new ServerSocket(port);
//Runtime的availableProcessor()方法返回当前系统的CPU数目.
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("服务器启动");
} public void service(){
while(true){
Socket socket=null;
try {
//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket=serverSocket.accept();
executorService.execute(new Handler(socket)); } catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
} } class Handler implements Runnable{
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
/*private DataOutputStream dos(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new DataOutputStream(socketOut);
}
private DataInputStream dis(Socket socket) throws IOException{
InputStream socketIn=socket.getInputStream();
return new DataInputStream(socketIn);
}*/ public void run(){
try {
System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os); InputStream is = socket.getInputStream( );
DataInputStream dis=new DataInputStream(is);
new myserverread(dis).start();
new myserverwite(dos).start();
} catch (IOException e) {
e.printStackTrace();
}/*finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}*/
}
}
class myserverread extends Thread{
private DataInputStream dis;
public myserverread (DataInputStream dis){
this.dis=dis;
}
public void run(){
String info;
try{
while(true)
{
info=dis.readUTF();
System.out.println("对方说"+info);
if (info.equals("bye")){
System.out.println("对方下线,程序退出");
System.exit(0);}
}
}
catch (Exception e){e.getStackTrace();} }
} class myserverwite extends Thread{
private DataOutputStream dos;
public myserverwite (DataOutputStream dos){
this.dos=dos;
}
public void run(){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String info;
try{
while(true)
{
info=br.readLine();
dos.writeUTF(info);
if (info.equals("bye")){
System.out.println("自己下线,程序退出");
System.exit(0);}
}
}
catch (Exception e){e.getStackTrace();} }
}
private int port=8821;
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private final int POOL_SIZE=10;//单个CPU线程池大小 public MultiThreadServer() throws IOException{
serverSocket=new ServerSocket(port);
//Runtime的availableProcessor()方法返回当前系统的CPU数目.
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("服务器启动");
} public void service(){
while(true){
Socket socket=null;
try {
//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket=serverSocket.accept();
executorService.execute(new Handler(socket)); } catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
} } class Handler implements Runnable{
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
/*private DataOutputStream dos(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new DataOutputStream(socketOut);
}
private DataInputStream dis(Socket socket) throws IOException{
InputStream socketIn=socket.getInputStream();
return new DataInputStream(socketIn);
}*/ public void run(){
try {
System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os); InputStream is = socket.getInputStream( );
DataInputStream dis=new DataInputStream(is);
new myserverread(dis).start();
new myserverwite(dos).start();
} catch (IOException e) {
e.printStackTrace();
}/*finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}*/
}
}
class myserverread extends Thread{
private DataInputStream dis;
public myserverread (DataInputStream dis){
this.dis=dis;
}
public void run(){
String info;
try{
while(true)
{
info=dis.readUTF();
System.out.println("对方说"+info);
if (info.equals("bye")){
System.out.println("对方下线,程序退出");
System.exit(0);}
}
}
catch (Exception e){e.getStackTrace();} }
} class myserverwite extends Thread{
private DataOutputStream dos;
public myserverwite (DataOutputStream dos){
this.dos=dos;
}
public void run(){
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String info;
try{
while(true)
{
info=br.readLine();
dos.writeUTF(info);
if (info.equals("bye")){
System.out.println("自己下线,程序退出");
System.exit(0);}
}
}
catch (Exception e){e.getStackTrace();} }
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货