用JAVA写一个服务程序,监听一个TCP端口,接受请求,进行处理并给出响应  
  如何接受请求的方式随意  
  如何给出响应的方式随意  
  服务的逻辑随意  
  具体实现可简可繁,省略的东西相对明确的说明一下  
  请有注释说明相关的算法和思路  

解决方案 »

  1.   

    Server.java
    ==================================================
    import java.net.*;
    import java.io.*;/**
     *  
     * 服务器端程序:
     * 
     * 1. 监听一端口,等待客户接入;
     * 2. 一旦有客户接入,就构造一个Socket会话对象;
     * 3. 将这个会话交给线程处理,然后主程序继续监听。
     *  
     * @author OKJohn 
     * @version 1.0
     */public class Server extends ServerSocket {    public Server(int serverPort) throws IOException {
    //用指定的端口构造一个ServerSocket
            super(serverPort);  
            try {
                while (true) {
    //监听一端口,等待客户接入
                    Socket socket = accept();  
    //将会话交给线程处理
                    new ServerThread(socket);  
                }
            } catch (IOException e) {
        e.printStackTrace();

    finally {
                close();  //关闭监听端口
            }
        }    // inner-class ServerThread
        class ServerThread extends Thread {
            private Socket socket;
            private BufferedReader in;
            private PrintWriter out;        // Ready to conversation
            public ServerThread(Socket s) throws IOException {
                this.socket = s;
        // 构造该会话中的输入输出流
                in = new BufferedReader(new InputStreamReader(
    socket.getInputStream(), "GB2312"));
                out = new PrintWriter(socket.getOutputStream(), true);
                start();
            }        // Execute conversation
            public void run() {
                try {                // Communicate with client until "bye" received.
                    while (true) {
        // 通过输入流接收客户端信息
                        String line = in.readLine();  
                        if ("bye".equals(line)) {  // 是否终止会话
                            break;
                        }
                        System.out.println("Received message:" + line);
                        String msg = "'" + line + "'has been accepted by server.";
        // 通过输出流向客户端发送信息
                        out.println(msg); 
                        out.flush();
                    }                out.close();
                    in.close();
                    socket.close();            } catch (IOException e) {
                    e.printStackTrace();
                }
            }    }    // main method
        public static void main(String[] args) throws IOException {
            new Server(2000);
        }
    }Client.java
    ================================================
    import java.net.*;
    import java.io.*;/**
     *  
     * 客户端程序
     * 
     * @author OKJohn 
     * @version 1.0
     */public class Client {    private Socket socket;
        private BufferedReader reader;
        private PrintWriter writer;    public Client(int serverPort) {
            try {     // 向指定服务器(IP、端口)发出请求
                socket = new Socket("127.0.0.1", serverPort);     // 用得到的会话对象构造输入输出流
                reader = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                writer = new PrintWriter(socket.getOutputStream());            // Communicate with server until "bye" input.
                while (true) {

                    // 接受统标准输入(键盘)输入的信息
    BufferedReader in = new BufferedReader(
                            new InputStreamReader(System.in));
                    String message = in.readLine();
                    // 将信息通过输出流发送给服务器
    writer.println(message);
                    writer.flush();
    // 是否终止会话
                    if ("bye".equals(message)) {
                        break;
                    }
    // 通过输入流接收服务器信息
                    String received = reader.readLine();
                    System.out.println(received);
                }            writer.close();
                reader.close();
                socket.close();        } catch (UnknownHostException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }    public static void main(String[] args) {
            new Client(2000);
        }
    }