Avenue U

posts(42) comments(0) trackbacks(0)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • C++(1)
  • Core Java(2)
  • My Master-degree Project(33)
  • SSH(4)
  • struts2(1)

随笔档案

  • 2009年7月 (1)
  • 2009年6月 (41)

Core Java

最新随笔

  • 1. String Stream in C++
  • 2. Validators in Struts2
  • 3. An Interceptor Example in Strut2-Spring-Hibernate Application
  • 4. 3 Validators in Struts2-Spring-Hibernate
  • 5. Strut2-Spring-Hibernate under Lomboz Eclipse3.3
  • 6. Run Spring by Maven2 in Vista
  • 7. Appendix B
  • 8. 5 Conclusion
  • 9. 4.7 Sentence Rank on Yahoo News Page
  • 10. 4.6 Sentence Rankv

搜索

  •  

最新评论

阅读排行榜

评论排行榜

View Post

A Socket Code Sample in Java

It's an implementation that can sent requests from multi-clients to server, meanwhile, the server handle the requests by multi-thread.

1. Server side code:
 1 package com.googlesites.qslbinghamton.corejava.socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.io.PrintWriter;
 9 import java.net.*;
10 import java.util.concurrent.*;
11 
12 public class MultiThreadServer {
13     private int port=8821;
14     private ServerSocket serverSocket;
15     private ExecutorService executorService;//线程池
16     private final int POOL_SIZE=10;//单个CPU线程池大小
17     
18     public MultiThreadServer() throws IOException{
19         serverSocket=new ServerSocket(port);
20         //Runtime的availableProcessor()方法返回当前系统的CPU数目.
21         executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
22         System.out.println("服务器启动");
23     }
24     
25     public void service(){
26         while(true){
27             Socket socket=null;
28             try {
29                 //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
30                 socket=serverSocket.accept();
31                 executorService.execute(new Handler(socket));
32                 
33             } catch (Exception e) {
34                 e.printStackTrace();
35             }
36         }
37     }
38     
39     public static void main(String[] args) throws IOException {
40         new MultiThreadServer().service();
41     }
42 
43 }
44 
45 class Handler implements Runnable{
46     private Socket socket;
47     public Handler(Socket socket){
48         this.socket=socket;
49     }
50     private PrintWriter getWriter(Socket socket) throws IOException{
51         OutputStream socketOut=socket.getOutputStream();
52         return new PrintWriter(socketOut,true);
53     }
54     private BufferedReader getReader(Socket socket) throws IOException{
55         InputStream socketIn=socket.getInputStream();
56         return new BufferedReader(new InputStreamReader(socketIn));
57     }
58     public String echo(String msg){
59         return "echo:"+msg;
60     }
61     public void run(){
62         try {
63             System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
64             BufferedReader br=getReader(socket);
65             PrintWriter pw=getWriter(socket);
66             String msg=null;
67             while((msg=br.readLine())!=null){
68                 System.out.println(msg);
69                 pw.println(echo(msg));
70                 if(msg.equals("bye"))
71                     break;
72             }
73         } catch (IOException e) {
74             e.printStackTrace();
75         }finally{
76             try {
77                 if(socket!=null)
78                     socket.close();
79             } catch (IOException e) {
80                 e.printStackTrace();
81             }
82         }
83     }
84 }

2. Client side code
 1 package com.googlesites.qslbinghamton.corejava.socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.net.Socket;
 8 import java.util.concurrent.ExecutorService;
 9 import java.util.concurrent.Executors;
10 
11 public class MultiThreadClient {
12     
13     public static void main(String[] args) {
14         int numTasks = 10;
15         
16         ExecutorService exec = Executors.newCachedThreadPool();
17 
18         for (int i = 0; i < numTasks; i++) {
19             exec.execute(createTask(i));
20         }
21 
22     }
23 
24     // 定义一个简单的任务
25     private static Runnable createTask(final int taskID) {
26         return new Runnable() {
27             private Socket socket = null;
28             private int port=8821;
29 
30             public void run() {
31                 System.out.println("Task " + taskID + ":start");
32                 try {                    
33                     socket = new Socket("localhost", port);
34                     // 发送关闭命令
35                     OutputStream socketOut = socket.getOutputStream();
36                     socketOut.write("shutdown\r\n".getBytes());
37 
38                     // 接收服务器的反馈
39                     BufferedReader br = new BufferedReader(
40                             new InputStreamReader(socket.getInputStream()));
41                     String msg = null;
42                     while ((msg = br.readLine()) != null)
43                         System.out.println(msg);
44                 } catch (IOException e) {                    
45                     e.printStackTrace();
46                 }
47             }
48 
49         };
50     }
51 }
52 


posted on 2009-06-13 10:30 JosephQuinn 阅读(479) 评论(0)  编辑  收藏 所属分类: Core Java

 
Powered by:
BlogJava
Copyright © JosephQuinn