好乱啊。
stbu.append(tter+"\r\t");试试

解决方案 »

  1.   

    能说用的什么吗?UDP?   TCP?
      

  2.   

    要是tcp你可能忘了 shutdown...()了。。
      

  3.   

    用的是TCP链接的,麻烦大神说详细点!
      

  4.   

    我估计是:服务端不知道客户端的信息发完了没有,所以一直等待(我估计呵呵),你试试在客户端发送的结束后,添加一个上面我说的方法,试试看能不能解决,具体看API文档(方法名我只是记了一个大概),加油
      

  5.   


                String tter=null;
                StringBuffer stbu=new StringBuffer();
                while ((tter=buff.readLine())!=null)
                {
                    stbu.append(tter).append("\n");  //这样就行啦
                    System.out.println(tter);
                }
               out.println(stbu.toString());
      

  6.   

    这样的话,我客户端改为如下接收
     while((tt=bf.readLine())!=null)
               {
                   System.out.println(tt);
               }
               System.out.println("hello");
    所有语句都以原来的格式打印出来看,但是,一直运行不到hello,也就是说一直在循环!没出来!
      

  7.   

    代码如下:
    package JustForTest;
    import java.io.*;
    import java.net.*;
    public class NetServer {
        ServerSocket serverSocket=null;    private Socket socket=null;
        Runtime rt=Runtime.getRuntime();
        
        private PrintWriter getWriter(Socket socket)throws IOException
        {
            OutputStream out=socket.getOutputStream();
            PrintWriter pw=new PrintWriter(out,true);
            return  pw;
        }
        private BufferedReader getReader(Socket socket)throws IOException
        {
            InputStream in=socket.getInputStream();
            BufferedReader bf=new BufferedReader(new InputStreamReader(in));
            return  bf;
        }
        public void service()throws IOException
        {
            serverSocket=new ServerSocket(7324);
            socket=serverSocket.accept();
            PrintWriter out=getWriter(socket);
            BufferedReader bf=getReader(socket);
            out.println("Welcome to you!!!");
            String comd=null;
            
            //String str=null;
            while ((comd=bf.readLine())!=null)
            {
             System.out.println(comd);
             String[] comdArray={"cmd.exe","/C",comd};
                
                Process pro=rt.exec(comdArray);
                try{
                    pro.waitFor();
                 }catch(InterruptedException e)
                {
              }
                BufferedReader buff=new BufferedReader(new InputStreamReader(pro.getInputStream()));
                String tter=null;
                StringBuffer stbu=new StringBuffer();
                while ((tter=buff.readLine())!=null)
                {
                    stbu.append(tter).append("\n");
                    System.out.println(tter);
                }
               out.println(stbu.toString());
               
               out.flush();
                       }
            serverSocket.close();
            socket.close();    }
        public static void main(String[] args)throws Exception
        {
           new NetServer().service();
        }}package Cluster;
    import java.io.*;
    import java.net.*;
    /**
     * Created by junfeng on 13-12-25.
     */
    public class NetClient {    private String host="localhost";
        private  int port=7324;
        private Socket socket=null;
        private PrintWriter getWriter(Socket socket)throws IOException
        {
            OutputStream out=socket.getOutputStream();
            PrintWriter pw=new PrintWriter(out,true);
            return  pw;
        }
        private BufferedReader getReader(Socket socket)throws IOException
        {
            InputStream in=socket.getInputStream();
            BufferedReader bf=new BufferedReader(new InputStreamReader(in));
            return  bf;
        }
        public void talk()throws IOException
        {
            socket=new Socket(host,port);
            PrintWriter pw = getWriter(socket);
            BufferedReader bf=getReader(socket);
            BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
            System.out.println(bf.readLine());
            //System.out.println(bf.readLine());
            String str=null;
            while((str=buf.readLine())!=null)
           {
                pw.println(str);
                String tt=bf.readLine();
                while((tt=bf.readLine())!=null)
               {
                   System.out.println(tt);
               }
               System.out.println("hello");//这句是测试的,一直没运行到! ???
            }
            socket.close();
        }
        public static void main(String[] args)throws IOException
        {
            new NetClient().talk();    }
    }
      

  8.   

    其实上面那个代码,我用DataInputStream和DataOutputStream类的writeUTF()和readUTF()解决了问题,
    但是我想利用字符流,就出现了上面的问题!也不知道为什么?
      

  9.   

    可以了,服务端和客户端增加了结束符。你稍微看下。
    其实那个是因为readLine在没有数据的时候会阻塞(你用的是阻塞socket)。而不是像读文件一样,没数据返回null。
    因此使用一个结束符号来表示已经接受完数据。当然这种仅限于一问一答式的结构。
    package JustForTest;import java.io.*;
    import java.net.*;public class NetServer {
    ServerSocket serverSocket = null; private Socket socket = null;
    Runtime rt = Runtime.getRuntime(); private PrintWriter getWriter(Socket socket) throws IOException {
    OutputStream out = socket.getOutputStream();
    PrintWriter pw = new PrintWriter(out, true);
    return pw;
    } private BufferedReader getReader(Socket socket) throws IOException {
    InputStream in = socket.getInputStream();
    BufferedReader bf = new BufferedReader(new InputStreamReader(in));
    return bf;
    } public void service() throws IOException {
    serverSocket = new ServerSocket(7324);
    socket = serverSocket.accept();
    PrintWriter out = getWriter(socket);
    BufferedReader bf = getReader(socket);
    out.println("Welcome to you!!!");
    String comd = null; // String str=null;
    while ((comd = bf.readLine()) != null) {
    System.out.println("Execute : "+comd);
    String[] comdArray = { "cmd.exe", "/C", comd }; Process pro = rt.exec(comdArray);
    try {
    pro.waitFor();
    } catch (InterruptedException e) {
    }
    BufferedReader buff = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    String tter = null;
    StringBuffer stbu = new StringBuffer();
    stbu.append("1、这里只测试多行数据发送\n");
    stbu.append("2、所以我就不管你数据来源了\n");
    stbu.append("3、具体的数据是否正确你另外测试\n");
    stbu.append(">>END<<\n"); //结束符
    /*
    while ((tter = buff.readLine()) != null) {
    stbu.append(tter).append("\n");
    System.out.println(tter);
    }
    */
    System.out.println("Send : "+stbu.toString());
    out.println(stbu.toString());
    out.flush();
    }
    serverSocket.close();
    socket.close(); } public static void main(String[] args) throws Exception {
    new NetServer().service();
    }}
    package Cluster;import java.io.*;
    import java.net.*;/**
     * Created by junfeng on 13-12-25.
     */
    public class NetClient { private String host = "localhost";
    private int port = 7324;
    private Socket socket = null; private PrintWriter getWriter(Socket socket) throws IOException {
    OutputStream out = socket.getOutputStream();
    PrintWriter pw = new PrintWriter(out, true);
    return pw;
    } private BufferedReader getReader(Socket socket) throws IOException {
    InputStream in = socket.getInputStream();
    BufferedReader bf = new BufferedReader(new InputStreamReader(in));
    return bf;
    } public void talk() throws IOException {
    socket = new Socket(host, port);
    PrintWriter pw = getWriter(socket);
    BufferedReader bf = getReader(socket);
    System.out.println(bf.readLine());
    BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
    String str = null;
    while ((str = buf.readLine()) != null) {
    pw.println(str);
    String tt = null;
    while ((tt = bf.readLine()) != null) {
    if(tt.indexOf(">>END<<")==0){
    break;
    }
    System.out.println(tt);
    }
    System.out.println("hello");//可以le 
    }
    socket.close();
    } public static void main(String[] args) throws IOException {
    new NetClient().talk(); }
    }
      

  10.   


    你有兴趣也可以看看NIO,非阻塞的网络通信。
      

  11.   


    你有兴趣也可以看看NIO,非阻塞的网络通信。
    非常感谢!运行了一下,可以用了!