各位大哥,偶对长连接短连接理解不透彻,请给出个例子好吗?
   还有同步异步也说说吧?

解决方案 »

  1.   

    长:connect连上后不断开, 进行N次收发操作.
    短:每次都connect, 完成任务后立即断开. 下次重连.
      

  2.   

    以A 和B连接为例:
    同步是说 A发信息给B后,B必须在确认发送完毕后才能给A回信息。
    而异步是指A 和B 可同时并发地通信。
      

  3.   

    这些都可以从网上看到啊,但是具体的实现呢?
    是不是这里设置啊
    ServerSocke socket = new ServerSocket(PORT);
    //假如没有这句话,就是长连接,
    //有的话就是短连接
    socket.setSoTimeout(50000);
    在这上面修改吧:
    package com.socket;import java.net.ServerSocket;/**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public class TestServerSocket {
      public final static int PORT = 9000;
      public TestServerSocket() {
      }  public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try {
          serverSocket = new ServerSocket(PORT);
          serverSocket.setSoTimeout(50);
          int i = 0 ;
          while (true) {
            new ServerThread(serverSocket.accept());
            System.out.println("i=" + ++i);
          }
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
        finally {    }
      }
    }
    客户端的:
    package com.socket;
    import java.net.*;
    import java.io.*;/**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public class ServerThread
        extends Thread {
      Socket socket = null;
      BufferedReader in = null;
      PrintWriter out = null;
      public ServerThread(Socket s) throws IOException{
        socket = s;
        in = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        start();
      }
      public void run(){
        try {
          while (true) {
            String str = in.readLine();
            if (str != null && str.equals("end")) {
              break;
            }
            out.println("From server=" + str);
            System.out.println("client=" + str);
          } //end while
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
        finally {
          try {
            socket.close();
          }
          catch (Exception ex) {
            ex.printStackTrace();
          }//end try
        }//end try
      }
    }
      

  4.   

    客户端的:package com.socket;import java.net.*;
    import java.io.*;/**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     
    *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public class ClientSocket {
      public ClientSocket() {
      } public static void main(String[] args) {
        InetAddress address = null;
        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
       try {
         address = InetAddress.getLocalHost();
         socket = new Socket(address, 9000);
         in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
         out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
         //input from console
         BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
         for(;;){
           String consoleIn = console.readLine();
           out.write(consoleIn);
           out.flush();
           if (consoleIn != null  && consoleIn.equals("end")) {
             break ;
           }
           String read = in.readLine();
           System.out.println("From server=" + read);    }//end for
    //     for (int i = 0; i < 10; i++) {
    //       out.println("hello" + i);
    //       System.out.println(in.readLine());
    //     }//end for   }
       catch (Exception ex) {
         ex.printStackTrace();
       }
       finally {
         try{
           in.close();
           out.close();
           socket.close();
         }catch(Exception ex){
           ex.printStackTrace();
         }
       }  }
    }
      

  5.   

    //socket.setSoTimeout(50000);这是设置超时而已
      

  6.   

    “短:每次都connect, 完成任务后立即断开. 下次重连.“
    这句话在上面的代码中,如何实现呢?
      

  7.   

    大概流程如:
    int doSomething(){
     new Socket();
     connect(ip,port);
     doTransaction();  //send and recv
     close();
    }
    多次调用这样的函数, 每次调用都是一次"连接-交易-断开"的过程.另外,短连接/长连接是相对的, 通常做几个交互(收发)就断开可以看做短连接.
      

  8.   

    大哥,具体一些啊?是不是短连接就是在上面的客户端中,去掉for(;;),的部分,然socket关掉。下次连接的时候,再用。