用Java实现多线程服务器程序

 1 package com.thread.demo;
 2 
 3 import java.io.IOException;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 import java.util.Date;
 7 
 8 public class ReceiveServer {
 9 
10     private final int  server_port = 9090;
11     
12     public ReceiveServer() {
13         ServerSocket serverSocket = null;
14         Socket request = null;
15         Thread receiveThread = null;//相应线程
16         try {
17             serverSocket = new ServerSocket(server_port);//初始化服务器
18             System.out.println("Welcome to the server!"); 
19             System.out.println(new Date()); 
20             System.out.println("The server is ready!"); 
21             System.out.println("Port: "+server_port); 
22             while(true) {//服务器需要一直监听
23                 request = serverSocket.accept();//接收客户机请求
24                 receiveThread = new Thread(new ReceiveThread(request));//创建响应线程
25                 receiveThread.start();//启动线程
26             }
27             
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31         
32     }
33     
34      
35      public static void main(String[] args) {
36         new ReceiveServer();
37     }
38 }
 1 package com.thread.demo;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStreamWriter;
 7 import java.io.PrintWriter;
 8 import java.net.Socket;
 9 
10 public class ReceiveThread implements Runnable {
11     Socket clientRequest; 
12     //用户连接的通信套接字 
13     BufferedReader input; //输入流 
14     PrintWriter output; //输出流 
15     public ReceiveThread(Socket s) 
16     { //serverThread的构造器 
17     this.clientRequest=s; 
18     //接收receiveServer传来的套接字 
19     InputStreamReader reader; 
20     OutputStreamWriter writer; 
21     try{ //初始化输入、输出流 
22     reader=new InputStreamReader 
23     (clientRequest.getInputStream()); 
24     writer=new OutputStreamWriter 
25     (clientRequest.getOutputStream()); 
26     input=new BufferedReader(reader); 
27     output=new PrintWriter(writer,true); 
28     }catch(IOException e){ 
29     System.out.println(e.getMessage());} 
30     output.println("Welcome to the server!"); 
31     //客户机连接欢迎词 
32     output.println("Now is: "+new java.util.Date()+" "+ "Port:"+clientRequest.getLocalPort()); 
33     output.println("What can I do for you?"); 
34     output.println(clientRequest.getInetAddress());
35     } 
36     public void run(){ //线程的执行方法 
37     String command=null; //用户指令 
38     String str=null; 
39     boolean done=false; 
40     while(!done){ 
41     try{ 
42     str=input.readLine(); //接收客户机指令 
43     }catch(IOException e){ 
44     System.out.println(e.getMessage());} 
45     command=str.trim().toUpperCase(); 
46     if(str==null || command.equals("QUIT")) 
47     //命令quit结束本次连接 
48     done=true; 
49     else if(command.equals("HELP")){ 
50     //命令help查询本服务器可接受的命令 
51     output.println("query"); 
52     output.println("quit"); 
53     output.println("help"); 
54     } 
55     else if(command.startsWith("QUERY")) 
56     { //命令query 
57     output.println("OK to query something!"); 
58     } 
59     //else if …….. //在此可加入服务器的其他指令 
60     else if(!command.startsWith("HELP") && 
61     !command.startsWith("QUIT") && 
62     !command.startsWith("QUERY")){ 
63     output.println("Command not Found! Please refer to the HELP!"); 
64     } 
65     }//end of while 
66     try{ 
67     clientRequest.close(); //关闭套接字 
68     }catch(IOException e){ 
69     System.out.println(e.getMessage()); 
70     } 
71     command=null; 
72     }//end of run 
73 }

启动该服务器程序后,可用telnet machine port命令连接,其中machine为本机名或地址,port为程序中指定的端口。也可以编写特定的客户机软件通过TCP的Socket套接字建立连接。

posted @ 2013-03-11 15:08  绝尘的神马  阅读(141)  评论(0)    收藏  举报