Socket服务器多线程,不多说了。。都懂,而且我也不知道对不对。。

服务端类:

 1 package org.demo.socket;
 2 
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10 import java.util.concurrent.ExecutorService;
11 import java.util.concurrent.Executors;
12 
13 /**
14  * 多线程Socket服务类
15  * @author Dream.V
16  *
17  */
18 public class MultiThreadServer {
19     //线程池对象
20     private ExecutorService executorService;
21     //服务器监听端口
22     private final static int PORT  = 8080;
23     //服务器套接字 对象
24     private ServerSocket serverSocket;
25     //客户端请求对象
26     private Socket socket;
27     //单个CPU线程数量
28     private final static int POOL_SIZE = 10;
29     //当前运行环境CPU线程数,I5(双核4线程)
30     private final static int CPU_THREADSIZE = Runtime.getRuntime().availableProcessors();
31     
32     public MultiThreadServer() throws IOException{
33         //初始化服务器监听对象
34         serverSocket = new ServerSocket(PORT);
35         //初始化线程池
36         executorService = Executors.newFixedThreadPool(POOL_SIZE*CPU_THREADSIZE);
37         System.out.println("server start ! \r\ncurrent thread pool size = "+POOL_SIZE*CPU_THREADSIZE);
38     }
39     
40     public void service() throws IOException{
41         while(true){
42             //阻塞式的方法
43             socket = serverSocket.accept();
44             System.out.println("新的请求来自于:"+socket.getInetAddress()+" 端口为:"+socket.getPort());
45             executorService.execute(new MyHandler(socket));
46         }
47     }
48     
49     public static void main(String[] args) throws IOException {
50         new MultiThreadServer().service();
51     }
52 }
53 
54 class MyHandler implements Runnable {
55     //客户端请求对象
56     public static Socket socket;
57     //构造方法
58     public MyHandler(Socket socket){
59         this.socket = socket;
60     }
61     //获取输入流对象
62     public static DataInputStream getDataInputStream() throws IOException{
63         InputStream is = socket.getInputStream();
64         DataInputStream dis = new DataInputStream(is);
65         return dis;
66     }
67     //获得输出流对象
68     public static DataOutputStream getDataOutputStream() throws IOException{
69         OutputStream os = socket.getOutputStream();
70         DataOutputStream dos = new DataOutputStream(os);
71         return dos;
72     }
73     public void run() {
74         try {
75             DataInputStream dis = getDataInputStream();
76             DataOutputStream dos = getDataOutputStream();
77             //读取送客户端发送过来的字符串
78             String str = dis.readUTF();
79             System.out.println("客户端发送过来的信息为:"+str);
80             if(str.equals("bye")){
81                 //向客户端发送字符串
82                 dos.writeUTF("bye bye!");
83             }else{
84                 //向客户端发送字符串
85                 dos.writeUTF("good!");
86             }
87         } catch (IOException e) {
88             e.printStackTrace();
89         }
90     }
91 }

客户端类:

 1 package org.demo.socket;
 2 
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8 import java.net.Socket;
 9 import java.net.UnknownHostException;
10 
11 public class MultiThreadClient {
12     public static void main(String[] args) throws UnknownHostException, IOException {
13         for (int i = 0; i < 10; i++) {
14             //localhost是一样的,发送一个请求到服务端
15             Socket socket = new Socket("127.0.0.1", 8080);
16             InputStream is = socket.getInputStream();
17             DataInputStream dis = new DataInputStream(is);
18             OutputStream os = socket.getOutputStream();
19             DataOutputStream dos = new DataOutputStream(os);
20             if(i%10==5){
21                 dos.writeUTF("bye");
22             }else{
23                 dos.writeUTF("I love java");
24             }
25             //接受从服务端发送回来的字符串
26             String str = dis.readUTF();
27             //
28             System.err.println("TASK "+i+" 服务器返回值为:"+str);
29         }
30     }
31 }

 

不知道对不对。。。哎,,我的国庆啊。。。god damn it!

posted on 2013-10-03 17:14  陰川蝴蝶君  阅读(279)  评论(0编辑  收藏  举报