梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
1.服务器
package sterning;

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.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

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 PrintWriter getWriter(Socket socket) throws IOException
    
{
        OutputStream socketOut 
= socket.getOutputStream();
        
return new PrintWriter(socketOut, true);
    }

    
    
private BufferedReader getReader(Socket socket) throws IOException
    
{
        InputStream socketIn 
= socket.getInputStream();
        
return new BufferedReader(new InputStreamReader(socketIn));
    }

    
    
public String echo(String msg)
    
{
        
return "echo:" + msg;
    }

    
    
public void run()
    
{
        
try
        
{
            System.out.println(
"New connection accepted "
                    
+ socket.getInetAddress() + ":" + socket.getPort());
            BufferedReader br 
= getReader(socket);
            PrintWriter pw 
= getWriter(socket);
            String msg 
= null;
            
while ((msg = br.readLine()) != null)
            
{
                System.out.println(msg);
                pw.println(echo(
"国际化"));
                
if (msg.equals("bye"))
                    
break;
            }

        }

        
catch (IOException e)
        
{
            e.printStackTrace();
        }

        
finally
        
{
            
try
            
{
                
if (socket != null)
                    socket.close();
            }

            
catch (IOException e)
            
{
                e.printStackTrace();
            }

        }

    }

}


2.服务器处理程序
package sterning;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MultiThreadClient
{
    
    
public static void main(String[] args)
    
{
        
int numTasks = 10;
        
        ExecutorService exec 
= Executors.newCachedThreadPool();
        
        
for (int i = 0; i < numTasks; i++)
        
{
            exec.execute(createTask(i));
        }

        
    }

    
    
// 定义一个简单的任务
    private static Runnable createTask(final int taskID)
    
{
        
return new Runnable()
            
{
                
private Socket socket = null;
                
                
private int port = 8821;
                
                
public void run()
                
{
                    System.out.println(
"Task " + taskID + ":start");
                    
try
                    
{
                        socket 
= new Socket("localhost", port);
                        
// 发送关闭命令
                        OutputStream socketOut = socket.getOutputStream();
                        socketOut.write(
"shutdown\r\n".getBytes());
                        
                        
// 接收服务器的反馈
                        BufferedReader br = new BufferedReader(
                                
new InputStreamReader(socket.getInputStream()));
                        String msg 
= null;
                        
while ((msg = br.readLine()) != null)
                            System.out.println(msg);
                    }

                    
catch (IOException e)
                    
{
                        e.printStackTrace();
                    }

                }

                
            }
;
    }

}


posted on 2011-08-26 10:28 HUIKK 阅读(402) 评论(0)  编辑  收藏 所属分类: Javajava Net

只有注册用户登录后才能发表评论。


网站导航: