rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » Java基础

java socket 长连接 短连接

长连接是一旦一个客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少次交易,直到客户端退出登陆或网络出现故障。这种技术在联机交易系统实现有利于提高效率。  
  短连接是客户端每发一个请求就与服务器建立一个连接,交易完成后关闭连接,这种技术实现较长连接简单,每次都connect,完成任务后立即断开,下次重连。 长:connect连上后不断开,   进行N次收发操作.     短:每次都connect,   完成任务后立即断开.   下次重连.  
   
  一般都是accept后启动一个线程去处理,该线程中的处理大致如下  
   
  短连接:  
  run(){  
      read           //读取请求包  
      process     //处理  
      write         //应答处理结果  
  }  
   
  长连接:  
  //socket.setSoTimeout(50000);   设置超时
  run(){  
    while(NotEnd){  
        read  
        process  
        write  
      }  
  }
package   com.socket;  
   
  import   java.net.ServerSocket;     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.*;     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  
      }  
  }
顶一下
(0)
踩一下
(0)