没环境,不能帮你调试,
错误好像很明显,
客户端 建立连接后,就读
  readline=sin.readLine();
服务端接受服务后也在读
  String cmd = fromC.readLine();
应该是不行的。然后不明白你想干嘛顺手给你改一下吧。用的是notepad也没有环境,不能帮你调试错误。
import java.io.*;
import java.net.*;
import  java.rmi.*;
import  java.rmi.server.*;
import  java.rmi.registry.*;
import  java.net.*;
                      public class Server{
                             
                             public static void main(String args[]) {
                               try{
                               
                                   ServerSocket server=null;
                                   
                                   try{
                                     server=new ServerSocket(4700); 
                                     }catch(Exception e) {
                                     System.out.println("can not listen to:"+e);
                                     }
                                     
                                     Socket socket=null;
                                     try{
                                       socket=server.accept();
                                       
                                       }catch(Exception e) {
                                       System.out.println("Error."+e);
                                       
                                     }
                                     
                                    
                           
                           
                            BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                            String cmd = fromC.readLine();                            
                             
                            Runtime runtime = Runtime.getRuntime();
                            Process pro = runtime.exec(cmd); 
                            InputStream its = pro.getInputStream();
                           
                               
                            BufferedReader sin=new BufferedReader(new InputStreamReader(its));
                            PrintWriter os=new PrintWriter(socket.getOutputStream());
                           
                            //System.out.println("Client:"+fromC.readLine());
                            System.out.println("Client:"+cmd );  //你只是想要答应客户端命令而已,不要再读了
    
                            String line;
                            line=sin.readLine();
                              
                              while(!line.equals("bye")){  //不明白,ping 命令不是以bye结束的,这里会死循环,你看着办吧
                                
                                  os.println(line); 
                                  os.flush(); 
                                  System.out.println("Server:"+line); 
                                  //System.out.println("Client:"+fromC.readLine());
                                  System.out.println("Client:"+cmd.readLine()); //你只是想要答应客户端命令而已,不要再读了
                                  line=sin.readLine();
                                  }
                                  
                                  os.close(); 
                                  fromC.close();
                                  socket.close();
                                  server.close();
                                  }catch(Exception e){
                                  System.out.println("Error:"+e);
                                }
                                
                              }
                              
                            }
--------------------------------------------------------------------------------
以上是服务器上的程序以下是服务器上的程序
--------------------------------------------------------------------------------
import java.net.*;
import java.io.*;                        public class Client{
                        
                        public static void main(String args[]) {
                               try{
                               Socket socket=new Socket("193.9.200.2",4700); 
                               OutputStream os = socket.getOutputStream();
                               os.write("ping 193.9.200.2 \n".getBytes());
                               os.flush();
                               os.close();
                               socket.close();
                               }catch(Exception e)
                               {e.printStackTrace();}
                         }
                       }                     
--------------------------------------------------------------------------------
     
同时测试时建议你关闭防火墙再看看,

解决方案 »

  1.   

    我改了一下:
    import java.io.*;
    import java.net.*;
    import  java.rmi.*;
    import  java.rmi.server.*;
    import  java.rmi.registry.*;
    import  java.net.*;
    import  java.util.Date;                      public class Server{
                                 
                                 public static void main(String args[]) {
                                   try{
                                   
                                       ServerSocket server=null;
                                       
                                       try{
                                         server=new ServerSocket(4700); 
                                         }catch(Exception e) {
                                         System.out.println("can not listen to:"+e);
                                         }
                                         
                                         Socket ssocket=null;
                                         try{
                                           ssocket=server.accept();
                                           
                                           }catch(Exception e) {
                                           System.out.println("Error."+e);
                                           
                                         }
                                         
                                        
                               
                               
                                BufferedReader fromC=new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
                                String cmd = fromC.readLine();
                                System.out.println("Client's command:"+cmd);                            Runtime runtime = Runtime.getRuntime();
                                Process pro = runtime.exec(cmd); 
                                InputStream its = pro.getInputStream();
                               
                                BufferedReader sin=new BufferedReader(new InputStreamReader(its));
                                PrintWriter os=new PrintWriter(ssocket.getOutputStream());
                               
                                String line;
                                
                                while(true){
                                 
                                  while( (line = sin.readLine()) != null ){
                                     
                                      os.println(line); 
                                      os.flush(); 
                                      //System.out.println("Server:"+line); 
                                      
                                      line=sin.readLine();
                                      }
                                       break;
                                    }
                                      
                                      os.close(); 
                                      fromC.close();
                                      ssocket.close();
                                      server.close();
                                      }
                                      
                                      catch(Exception e){System.out.println("Error:"+e);}
                                    
                                  }
                                  
                                }
    -------------------------------------------------------------------
    import java.net.*;
    import java.io.*;                        public class Client{
                            
                            public static void main(String args[]) {
                                   try{
                                   Socket csocket=new Socket("193.9.200.2",4700); 
                                   OutputStream os = csocket.getOutputStream();
                                   os.write("ping 193.9.200.10 \n".getBytes());
                                  
                               BufferedReader br=new BufferedReader(new InputStreamReader(csocket.getInputStream()));
                               String line;
                                   while( (line = br.readLine()) != null ){
                                           System.out.println("Clinet::"+line);
                                    }
                                   os.flush();
                                   os.close();
                                   csocket.close();
                                       }
                                   catch(Exception e){e.printStackTrace();}
                                   
                             }
                           }                     
    ----------------------------------------------------------
    可以收到这样的效果:
    客户端发出一条指令如PIGN 命令,由os.write("ping 193.9.200.2 \n".getBytes())
    交给SERVER执行,执行的结果实时的发回给CLINET(命令产生的结果集)。
    CLINET打印该结果。问题是,命令执行完成后,两端的通信就中断了
    如何能保持SERVER端的监听,以便接收CLINET的下一条命令?
      

  2.   

    这个很简单阿。
    不过在做之前建议你不要用一大堆类带buffer之类的东西把自己绕晕了。
    用OutputStream, InputStream就够了。基本如下。
    S  ==  服务端
    C  ==  客户端
    Sos == 服务端socket的OutputStream.
    Cos == 客户端socket的OutputStream.
    Sis == 服务端socket的InputStream.
    Cis == 客户端socket的InputStream.1. S listening 
    2. C connect
    3. S accept  至此,连接建立成功。 分别用各自的 socket的 OutputStream, InputStream 进行数据交互
      S accept之后,随即调用 Sis.read(); 进行数据读等待。(这是个阻塞的方法)
    5. Cos.write("命令")
    6. Sis接受到后 执行命令,并调用 Sos.write把 结果 写回去。
       写完后,随即调用 Sis.read(); 进行数据读等待。
       (保证服务端总是处于读状态)
    7. Cis.read() 接受 结果数据,然后把结果数据显示出来。至此 一次数据交互已经完成。
    8.如果需要再次交互 ,则调用Cos.write(“另外一个命令”)
    重复 6-7 的 步骤即可。9.关于结束,一种方式是通过发送双方协定的特殊数据包,比如 C 发送"bye"给S,S接收到后就关闭服务。
    另一种方式,把C端的连接关闭了,S端就会出异常了,不推荐。
      

  3.   

    import java.net.*;
    import java.io.*;                        public class Client{
                            
                            public static void main(String args[]) {
                                   try{
                                   Socket socket=new Socket("127.0.0.1",4700); 
                                   BufferedReader sin=new BufferedReader(new StringReader("ping"));
                                   PrintWriter os=new PrintWriter(socket.getOutputStream());
                                   
                                   String cmd;
                                   String line;
                                   cmd=sin.readLine();
                                   BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                   
                                    
                                        while(!cmd.equals("end")){ 
                                             os.println(cmd+"\n");
                                             os.flush(); 
                                             System.out.println("Client's command:: "+cmd);
                                             while((line=is.readLine())!=null){
                                                    System.out.println(line);
                                                    
                                                   }
                                                       
                                             }
                                              
                                             os.close(); 
                                             is.close();
                                             socket.close();
                                             }catch(Exception e) {
                                             System.out.println("Error"+e); 
                                           
                                           }
                                         }
                                       }
    ----------------------------------------------import java.io.*;
    import java.net.*;
    import  java.rmi.*;
    import  java.rmi.server.*;
    import  java.rmi.registry.*;
    import  java.net.*;
                          public class Server{
                                 
                                 public static void main(String args[]){
                                   try{
                                   
                                       ServerSocket server=null;
                                       
                                       try{
                                         server=new ServerSocket(4700); 
                                         }catch(Exception e) {
                                         System.out.println("can not listen to:"+e);
                                         }
                                         
                                         Socket socket=null;
                                         try{
                                           socket=server.accept();
                                           
                                           }catch(Exception e) {
                                           System.out.println("Error."+e);
                                           
                                         }
                                         
                                        
                               
                               
                                
                                
                             BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                             
                                String cmd;
                                
                                cmd = fromC.readLine(); 
                                Runtime runtime = Runtime.getRuntime();
                                Process pro = runtime.exec(cmd); 
                                InputStream its = pro.getInputStream(); 
                                BufferedReader sin=new BufferedReader(new InputStreamReader(its));
                                PrintWriter os=new PrintWriter(socket.getOutputStream());
                                String line;
                                
                                  
                                 
                                  while(!cmd.equals("end")){ 
                                      while((line=sin.readLine())!=null){
                                      os.println(line); 
                                      os.flush(); 
                                      }
                                      
                                      cmd=fromC.readLine();
                                      }
                                      
                                      os.close(); 
                                      fromC.close();
                                      socket.close();
                                      server.close();
                                      }catch(Exception e){
                                      System.out.println("Error:"+e);
                                    }
                                    
                                  
                                  
                                  
                                  }
                                  
                                }
      

  4.   

    import java.io.*;
    import java.net.*;
    import  java.rmi.*;
    import  java.rmi.server.*;
    import  java.rmi.registry.*;
    import  java.net.*;
                          public class Server{
                                 
                                 public static void main(String args[]) {
                                   try{
                                   
                                       ServerSocket server=null;
                                       
                                       try{
                                         server=new ServerSocket(4700); 
                                         }catch(Exception e) {
                                         System.out.println("can not listen to:"+e);
                                         }
                                         
                                         Socket socket=null;
                                         try{
                                           socket=server.accept();
                                           
                                           }catch(Exception e) {
                                           System.out.println("Error."+e);
                                           
                                         }
                                         
                                        
                               
                               
                                BufferedReader fromC=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                String cmd = fromC.readLine();                            
                                 
                                Runtime runtime = Runtime.getRuntime();
                                Process pro = runtime.exec(cmd); 
                                InputStream its = pro.getInputStream();
                               
                                   
                                BufferedReader sin=new BufferedReader(new InputStreamReader(its));
                                PrintWriter os=new PrintWriter(socket.getOutputStream());
                               
                                //System.out.println("Client:"+fromC.readLine());
                                System.out.println("Client:"+cmd );  //你只是想要答应客户端命令而已,不要再读了
        
                                String line;
                                line=sin.readLine();
                                  
                                  while(!line.equals("bye")){  //不明白,ping 命令不是以bye结束的,这里会死循环,你看着办吧
                                    
                                      os.println(line); 
                                      os.flush(); 
                                      System.out.println("Server:"+line); 
                                      //System.out.println("Client:"+fromC.readLine());
                                      System.out.println("Client:"+cmd.readLine()); //你只是想要答应客户端命令而已,不要再读了
                                      line=sin.readLine();
                                      }
                                      
                                      os.close(); 
                                      fromC.close();
                                      socket.close();
                                      server.close();
                                      }catch(Exception e){
                                      System.out.println("Error:"+e);
                                    }
                                    
                                  }
                                  
                                }
    --------------------------------------------------------------------------------
    以上是服务器上的程序以下是服务器上的程序
    --------------------------------------------------------------------------------
    import java.net.*;
    import java.io.*;                        public class Client{
                            
                            public static void main(String args[]) {
                                   try{
                                   Socket socket=new Socket("193.9.200.2",4700); 
                                   OutputStream os = socket.getOutputStream();
                                   os.write("ping 193.9.200.2 \n".getBytes());
                                   os.flush();
                                   os.close();
                                   socket.close();
                                   }catch(Exception e)
                                   {e.printStackTrace();}
                             }
                           }