要求,是服务器程序,在某端口监听,收到客户端的输入后,返回一段。。

解决方案 »

  1.   

    import java.io.*;
    import java.net.*;
    class TCPServer{
    public static void main(String argv[])throws Exception
    {
    String clientSentence;
    String capitalizedSentence;
    ServerSocket welcomeSocket=new ServerSocket(6789);
    while(true)
    {
    Socket connectionSocket=welcomeSocket.accept();
    BufferedReader inFromClient=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    DataOutputStream outToClient=new DataOutputStream(connectionSocket.getOutputStream());
    clientSentence=inFromClient.readLine();
    capitalizedSentence=clientSentence.toUpperCase()+'\n';
    outToClient.writeBytes(capitalizedSentence);
    }
    }
    }
      

  2.   

    还用io里的东西啊,建议还是看看nio吧!!
      

  3.   

    package Server;import java.nio.channels.*;
    import java.nio.CharBuffer;
    import java.nio.charset.*;
    import java.nio.ByteBuffer;
    import java.io.*;
    import java.util.Set;
    import java.util.Iterator;
    import struct.*;/**
     * @author xxx
     *
     * A Non-blocking Socket for java
     */
    public class DySocketServer {
    //构造函数
    public DySocketServer(){

    //创建服务端Socket 

    try{
    ServerSocketChannel server = ServerSocketChannel.open();

    //设置成非阻塞模式
    server.configureBlocking(false);

    //绑定主机端口
    server.socket().bind(new java.net.InetSocketAddress(8000));
    System.out.println("Server is at port 8000");

    //创建一个监视器Selector对象
    Selector selector = Selector.open();

    //注册接受端口
    server.register(selector,SelectionKey.OP_ACCEPT);

    //开始服务循环
    for(;;){

    //等待事件
    selector.select();

    //获得关键字标识
    Set keys = selector.selectedKeys();
    System.out.println(keys.size()+"  users connect");
    Iterator i = keys.iterator();

    //对每个关键字处理
    while(i.hasNext()){
    SelectionKey key = (SelectionKey)i.next();

    //删除当前key
       i.remove();

       // 如果可以访问,客户端请求一个连接
                   if(key.isAcceptable()){
                    SocketChannel client = server.accept();
                   /* if(client == null){
                   
                    }else
                    {
                   
                    }*/
                    client.configureBlocking(false);
                   
                    client.register(selector,SelectionKey.OP_READ);
                   
                    continue;
                   }
                   
                   //如果可读,服务器端准备读取
                   if(key.isReadable()){
                   
                    ReadableByteChannel client = (ReadableByteChannel)key.channel();
                   // SocketChannel client = (SocketChannel)key.channel();
                   
                    //从客户端读取数据
                    int BufferSize = 1024;
                    ByteBuffer buffer = ByteBuffer.allocate(BufferSize);
                  //  buffer.clear();
                  
    buffer.clear();

                    try{
                   
                    int rec = client.read(buffer);
                    if(rec > 0){
                    System.out.println(rec+ "bytes has been read");
                    }
                    }catch(IOException e){
                    e.printStackTrace();
                    System.exit(0);
                    continue;
                    }
                  //在控制段显示bytes
            
            
            
             buffer.flip();
             Charset charset = Charset.forName("ISO-8859-1");
                 CharsetDecoder decoder = charset.newDecoder();   
             CharBuffer charBuffer = decoder.decode(buffer);  
             System.out.print(charBuffer.toString());  
             key.cancel();
             continue;
                   }
    }
    }
    }catch(IOException e){
    e.printStackTrace();
    }

    }
    }
      

  4.   

    import java.io.*;
    import java.net.*;
    public class ThreadedReversalServer
    {
    public static void main(String[] agrs)
    {
    int i = 0;
    try
    {
    // 创建一个监听8189端口的ServerSocket
    ServerSocket s = new ServerSocket(8189);
    for (;;)
    {
    // 启动ServerSocket的监听
    Socket insock = s.accept();
    System.out.println("Thread " + i + " run.");
    // 启动处理客户端信息的线程
    new ThreadReversal(insock, i).start();
    i++;
    }
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }

    }
    class ThreadReversal extends Thread
    {
    private Socket sock;
    private int counter;

    public ThreadReversal(Socket s, int i)
    {
    sock = s;
    counter = i;
    }
    public void run()
    {
    try
    {
    // 建立输入流通道
    BufferedReader in = 
    new BufferedReader(
    new InputStreamReader(sock.getInputStream()));
    // 建立输出流通道
    PrintWriter out = 
    new PrintWriter(sock.getOutputStream(), true/*autoFlush*/);
    out.println("Hello! Please input. Enter quit to exit.");
    while(true)
    {
    String line = in.readLine();
    if (null == line)
    continue;
    if (line.trim().equals("serverquit")||line.trim().equals("serverexit"))
    {
    System.out.println(line);
    break;
    }
    else
    {
    // 翻转输入的字符串
    StringBuffer rline = new StringBuffer();
    for (int i = line.length(); i > 0; i--)
    rline.append(line.charAt(i - 1));
    out.println("Reversed: " + rline.toString());
    }
    }
    out.close();
    in.close();
    sock.close();
    System.out.println("Thread " + counter + " closed.");
    }
    catch(IOException e)
    {
    e.printStackTrace();
    }
    }
    }
      

  5.   

    netbeans编写:
    客户端:
    /*
     * talkclient.java
     *
     * Created on 2005年11月1日, 下午10:57
     */package zhide2;import java.io.*;
    import java.net.*;
    /**
     *
     * @author  zhide1548
     */
    public class talkclient extends java.awt.Frame {
        
        /** Creates new form talkclient */
        public talkclient() {
            try{
                socket=new Socket("127.0.0.1",4700);
                os=new PrintWriter(socket.getOutputStream());
                is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            }catch(Exception e){
                System.out.println("Error"+e);
            }        
            initComponents();
        }
        
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        private void initComponents() {//GEN-BEGIN:initComponents
            panel1 = new java.awt.Panel();
            label1 = new java.awt.Label();
            textField1 = new java.awt.TextField();
            button1 = new java.awt.Button();
            button2 = new java.awt.Button();
            textArea1 = new java.awt.TextArea();        setFocusCycleRoot(false);
            setResizable(false);
            setTitle("\u5ba2\u6237\u7aef\u7a97\u4f53");
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    exitForm(evt);
                }
                public void windowOpened(java.awt.event.WindowEvent evt) {
                    formWindowOpened(evt);
                }
            });        label1.setText("\u53cd\u8f6c\u6587\u5b57\uff1a");
            panel1.add(label1);        textField1.setText("                                    ");
            panel1.add(textField1);        button1.setLabel("\u53d1\u9001");
            button1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    button1ActionPerformed(evt);
                }
            });        panel1.add(button1);        button2.setLabel("\u6e05\u7a7a");
            button2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    button2ActionPerformed(evt);
                }
            });        panel1.add(button2);        add(panel1, java.awt.BorderLayout.SOUTH);        add(textArea1, java.awt.BorderLayout.CENTER);        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((screenSize.width-400)/2, (screenSize.height-400)/2, 400, 400);
        }//GEN-END:initComponents    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
            // TODO 将在此处增加您的处理代码:
            textField1.setText("");
        }//GEN-LAST:event_formWindowOpened    private void button2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button2ActionPerformed
            // TODO 将在此处增加您的处理代码:
            textArea1.setText("");        
        }//GEN-LAST:event_button2ActionPerformed    private void button1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_button1ActionPerformed
            // TODO 将在此处增加您的处理代码:
            try{
                readline=textField1.getText();
                os.println(readline);
                os.flush();
                textArea1.append("Client:"+readline+"\n");
                textArea1.append("Server:"+is.readLine()+"\n");
                textField1.setText("");
            }catch(Exception e){
                System.out.println("Error"+e);
            }        
        }//GEN-LAST:event_button1ActionPerformed
        
        /** Exit the Application */
        private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
            try{
               os.println("bye");
               os.flush();
               os.close();
               is.close();
               socket.close();
            }catch(Exception e){
                System.out.println("Error"+e);
            }
            System.exit(0);
        }//GEN-LAST:event_exitForm
        
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            new talkclient().show();
        }
        
        
        // 变量声明 - 不进行修改//GEN-BEGIN:variables
        private java.awt.Button button1;
        private java.awt.Button button2;
        private java.awt.Label label1;
        private java.awt.Panel panel1;
        private java.awt.TextArea textArea1;
        private java.awt.TextField textField1;
        // 变量声明结束//GEN-END:variables
        private Socket socket;
        private PrintWriter os;
        private BufferedReader is;
        private String readline;    
    }
      

  6.   

    接上:
    服务器端:
    /*
     * talkserver.java
     *
     * Created on 2005年11月1日, 下午11:43
     */package zhide2;import java.net.*;
    import java.io.*;
    import zhide.ServerThread;
    /**
     *
     * @author  zhide1548
     */
    public class talkserver extends java.awt.Frame {
        
        /** Creates new form talkserver */
        public talkserver() {
            initComponents();      
        }
        
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        private void initComponents() {//GEN-BEGIN:initComponents
            textArea1 = new java.awt.TextArea();        setResizable(false);
            setTitle("\u670d\u52a1\u5668\u7aef\u7a97\u4f53");
            addComponentListener(new java.awt.event.ComponentAdapter() {
                public void componentShown(java.awt.event.ComponentEvent evt) {
                    formComponentShown(evt);
                }
            });
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    exitForm(evt);
                }
            });        textArea1.setEditable(false);
            textArea1.setEnabled(false);
            add(textArea1, java.awt.BorderLayout.CENTER);        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            setBounds((screenSize.width-400)/2, (screenSize.height-400)/2, 400, 400);
        }//GEN-END:initComponents    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
            // TODO 将在此处增加您的处理代码:
            try{
                serverSocket=new ServerSocket(4700);
            }catch(IOException e){
                System.out.println("could not listen on port:4700");
                System.exit(-1);
            }
            while(true){
                try{
                new ServerThread(serverSocket.accept(),clientnum).start();
                }catch(Exception e){
                    System.out.println("Error:"+e);
                }
                textArea1.append("第"+(clientnum+1)+"个用户进行连接\n");
                //System.out.println("第"+(clientnum+1)+"个用户进行连接");
                clientnum++;
            }  
        }//GEN-LAST:event_formComponentShown
        
        /** Exit the Application */
        private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
            try{
            serverSocket.close();
            }catch(Exception e){
                System.out.println("error"+e);
            }
            System.exit(0);
        }//GEN-LAST:event_exitForm
        
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            new talkserver().show();
        }
        
        
        // 变量声明 - 不进行修改//GEN-BEGIN:variables
        private java.awt.TextArea textArea1;
        // 变量声明结束//GEN-END:variables
        private int clientnum;
        private ServerSocket serverSocket=null;
    }
      

  7.   

    服务器用到线程类:
    /*
     * ServerThread.java
     *
     * Created on 2005年10月17日, 下午4:26
     */package zhide;import java.io.*;
    import java.net.*;/**
     *
     * @author  zhide1548
     */
    public class ServerThread extends Thread{
        
        Socket socket=null;
        int clientnum;
        
        /** Creates a new instance of ServerThread */
        public ServerThread(Socket socket,int num) {
            this.socket=socket;
            clientnum=num+1;
        }
        
        /**
         * @param args the command line arguments
         */
        public void run() {
            try{
                String line;
                BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter os=new PrintWriter(socket.getOutputStream());
                line=is.readLine();
                StringBuffer neline=new StringBuffer(line).reverse();
                while(!line.equals("bye")){
                    os.println(neline);
                    os.flush();
                    //System.out.println("Client"+clientnum+":"+line);
                    //System.out.println("Server:"+neline);
                    line=is.readLine();
                    neline=new StringBuffer(line).reverse();
                }
                is.close();
                os.close();
                socket.close();
                System.out.println("第"+clientnum+"个用户退出连接");
            }catch(Exception e){
                System.out.println("Error:"+e);
            }
        }
        
    }