我想client端写一个串,再读一个串。server端读一个串,再写一个串。
代码如下:Server在1处阻塞,Client在2处阻塞。这个功能应该怎样实现?
Server:
        ServerSocket server = new ServerSocket(1025);
        Socket socket = server.accept();        
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket
                .getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null)<----1
        {
            System.out.println(line);
        }        
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                socket.getOutputStream()));        
        writer.write("helloWorld!");
        writer.close();
        reader.close();
        socket.close();
        server.close();Client:
        Socket client = new Socket("127.0.0.1", 1025);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                client.getOutputStream()));
        writer.write("helloWorld!");
        writer.flush();
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(client
                .getInputStream()));                String line = null;
        while ((line = reader.readLine()) != null)<---2
        {
            System.out.println(line);
        }        writer.close();
        reader.close();
        client.close();

解决方案 »

  1.   

    Server:
            ServerSocket server = new ServerSocket(1025);
            Socket socket = server.accept();        
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                    socket.getOutputStream()));  
            while (true)<----1
            {
                if ((line = reader.readLine()).equals("END") bread;
                System.out.println(line);            writer.write(String s = new BufferedReader(new InputStreamReader(System.in)).readLine());
                writer.flush();
            }  
            writer.close();
            reader.close();
            socket.close();
            server.close();Client:
            Socket client = new Socket("127.0.0.1", 1025);
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                    client.getOutputStream()));
            writer.write("helloWorld!");
            writer.flush();
            
            BufferedReader reader = new BufferedReader(new InputStreamReader(client
                    .getInputStream()));        
            String s = null;
            while (true)
            {
                System.out.println(reader.readLine());
                System.out.println(line);            writer.write( s = new BufferedReader(new InputStreamReader(System.in)).readLine());
                writer.flush();
                if (s.equals("END")) break;
            }        writer.close();
            reader.close();
            client.close();
      

  2.   

    InputStream is = socket.getInputStream();
    OutputStream os = socket.getOutputStream();
    ObjectInputStream objIn = new ObjectInputStream(is);<--1
    ObjectOutputStream objOut = new ObjectOutputStream(os);
    知道1处为什么会阻塞吗?
      

  3.   

    //: c15:JabberClient.java
    // From 'Thinking in Java, 2nd ed.' by Bruce Eckel
    // www.BruceEckel.com. See copyright notice in CopyRight.txt.
    // Very simple client that just sends
    // lines to the server and reads lines
    // that the server sends.
    import java.net.*;
    import java.io.*;public class JabberClient {
      public static void main(String[] args) 
          throws IOException {
        // Passing null to getByName() produces the
        // special "Local Loopback" IP address, for
        // testing on one machine w/o a network:
        InetAddress addr = 
          InetAddress.getByName(null);
        // Alternatively, you can use 
        // the address or name:
        // InetAddress addr = 
        //    InetAddress.getByName("127.0.0.1");
        // InetAddress addr = 
        //    InetAddress.getByName("localhost");
        System.out.println("addr = " + addr);
        Socket socket = 
          new Socket(addr, JabberServer.PORT);
        // Guard everything in a try-finally to make
        // sure that the socket is closed:
        try {
          System.out.println("socket = " + socket);
          BufferedReader in =
            new BufferedReader(
              new InputStreamReader(
                socket.getInputStream()));
          // Output is automatically flushed
          // by PrintWriter:
          PrintWriter out =
            new PrintWriter(
              new BufferedWriter(
                new OutputStreamWriter(
                  socket.getOutputStream())),true);
    System.out.print("Client:");
     BufferedReader clientInput = new BufferedReader(new InputStreamReader(System.in));
            out.println(clientInput.readLine());
    while (true) {  
              String str = in.readLine();
              if (str.equals("END")) break;
              System.out.println("Server: " + str);
       System.out.print("Client:");
       BufferedReader myInput = new BufferedReader(new InputStreamReader(System.in));
              String ss = myInput.readLine();
              out.println(ss);
            }
        } finally {
          System.out.println("closing...");
          socket.close();
        }
      }
    } ///:~
    /////////////////////////////////////////////////////
    //: c15:JabberServer.java
    // From 'Thinking in Java, 2nd ed.' by Bruce Eckel
    // www.BruceEckel.com. See copyright notice in CopyRight.txt.
    // Very simple server that just
    // echoes whatever the client sends.
    import java.io.*;
    import java.net.*;public class JabberServer {  
      // Choose a port outside of the range 1-1024:
      public static final int PORT = 8080;
      public static void main(String[] args) 
          throws IOException {
        ServerSocket s = new ServerSocket(PORT);
        System.out.println("Started: " + s);
        try {
          // Blocks until a connection occurs:
          Socket socket = s.accept();
          try {
            System.out.println(
              "Connection accepted: "+ socket);
            BufferedReader in = 
              new BufferedReader(
                new InputStreamReader(
                  socket.getInputStream()));
            // Output is automatically flushed
            // by PrintWriter:
            PrintWriter out = 
              new PrintWriter(
                new BufferedWriter(
                  new OutputStreamWriter(
                    socket.getOutputStream())),true);
            while (true) {  
              String str = in.readLine();
              if (str.equals("END")) break;
              System.out.println("Client: " + str);
              System.out.print("Server: ");
       BufferedReader myInput = new BufferedReader(new InputStreamReader(System.in));
              String ss = myInput.readLine();
              out.println(ss);
            }
          // Always close the two sockets...
          } finally {
            System.out.println("closing...");
            socket.close();
          }
        } finally {
          s.close();
        }
      } 
    } ///:~
      

  4.   

    哈哈 我面試的 時候 就是這題
    建議 樓主 去看一下 think in java 裡面有代碼實現(好像十四章,具體忘了)