不知道 问题说的对不对,我先说下我的代码作用是 
 服务端开始监听,客户端连接上后,输入要执行的命令,然后服务端执行后将结果传递到客户端!
 
  问题是现在,命令执行后,数据并不是立马传输过来,多执行几个命令之后数据才传输过来,而且每次传输过来还只是一行数据!
刚接触socket,好多不明白的地方,个人感觉应该是缓冲区问题,请指教!谢谢!
  

解决方案 »

  1.   

    不好意思 忘记附上代码了
    Eachserver:
     
    package test;import java.io.*;
    import java.net.*;
    public class Eachserver { /**
     * @param args
     */

     public int port=8000;
     private ServerSocket serversocket;
     
     public Eachserver() throws IOException{
     serversocket=new ServerSocket(port);
     System.out.println("服务启动成功");
     }
     
     public String echo(String msg){
     return "echo:"+msg;
     }
     
     private PrintWriter getWriter(Socket socket) throws IOException{
     OutputStream socketOut=socket.getOutputStream();
     return new PrintWriter(socketOut,true);
     }  private BufferedReader getReader(Socket socket) throws IOException{
     InputStream socketIn=socket.getInputStream();
       
     return new BufferedReader(new InputStreamReader(socketIn));
     }
     public void service() {
        while (true) {
          Socket socket=null;
          try {
            socket = serversocket.accept();  //等待客户连接
            System.out.println("New connection accepted " 
                            +socket.getInetAddress() + ":" +socket.getPort());
            BufferedReader br =getReader(socket);
            PrintWriter pw = getWriter(socket);         String msg = null;
            while ((msg = br.readLine()) != null) {
             if(msg.equals("bye")){
                                       //如果客户发送的消息为“bye”,就结束通信
                return;
             } else{
             pw.println(execcmd(msg));
            pw.flush();
            }
              
          }
          }catch (IOException e) {
             e.printStackTrace();
          }finally {
             try{
               if(socket!=null)socket.close();  //断开连接
             }catch (IOException e) {e.printStackTrace();}
          }
        }
      }
     
        public  String execcmd(String cmd){
         String result="";
         try {
         Process child = Runtime.getRuntime().exec(cmd);
         InputStream in = child.getInputStream();
     
         int c=in.available();
         while ((c = in.read()) != -1) {
         result=result+(char)c;
         }
         in.close();
         } catch (IOException e) {
         System.err.println(e);
         }
         System.out.println(result);
         return result;
        }   public static void main(String args[])throws IOException {
        new Eachserver().service();
      }}
    EchoClient: package test;import java.net.*;
    import java.io.*;
    public class EchoClient {
      private String host="localhost";
      private int port=8000;
      private Socket socket;
      
      public EchoClient()throws IOException{
         socket=new Socket(host,port);  
      }
      public static void main(String args[])throws IOException{
        new EchoClient().talk();
      }
      private PrintWriter getWriter(Socket socket)throws IOException{
        OutputStream socketOut = socket.getOutputStream();
        return new PrintWriter(socketOut,true);
      }
      private BufferedReader getReader(Socket socket)throws IOException{
        InputStream socketIn = socket.getInputStream();
        return new BufferedReader(new InputStreamReader(socketIn));
      }
      public void talk()throws IOException {
        try{
          BufferedReader br=getReader(socket);
          PrintWriter pw=getWriter(socket);
          BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));
          String msg=null;
          while((msg=localReader.readLine())!=null){
            pw.println(msg);
            System.out.println(br.readLine());        if(msg.equals("bye"))
              break;
          }
        }catch(IOException e){
           e.printStackTrace();
        }finally{
           try{socket.close();}catch(IOException e){e.printStackTrace();}
        }
      }
    }
      

  2.   

    你是不是使用了同步的多线程哦。。
    那样得话。。有些时候电脑CPU会交替执行一系列得指令。。
    你可以试试提高你的那个线程得优先级
      

  3.   

    加上socket.setTcpNoDelay(true);
    nagle算法,自己google一下就会明白了
      

  4.   

    楼上的兄弟 照你的方式看了下 还是老问题!
     会不会是我传输数据时使用的方式不对啊
     readline()都是阻塞的方法啊