0

我正在实现一个 java 多线程服务器。无论客户端写入套接字流的任何内容都不会在服务器端打印出来。只有在我终止客户端线程后才会打印数据。问题是什么?这是我发送数据的客户端代码:

BufferWriter writer = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream() , 
                             "UTF-8" ) );
writer.write(curr.substring(3));
writer.flush();

服务器上的代码:

    public class ThreadedEchoServer
{  
   public static void main(String[] args )
   {  
      try
      {  
         int i = 1;
         ServerSocket s = new ServerSocket(8189);

         while (true)
         {  
            Socket incoming = s.accept();
            System.out.println("Spawning " + i);
            Runnable r = new ThreadedEchoHandler(incoming, i);
            Thread t = new Thread(r);
            t.start();
            i++;
         }
      }
      catch (IOException e)
      {  
         e.printStackTrace();
      }
   }
}

/**
   This class handles the client input for one server socket connection. 
*/
    class ThreadedEchoHandler implements Runnable
    { 
       /**
          Constructs a handler.
          @param i the incoming socket
          @param c the counter for the handlers (used in prompts)
       */
       public ThreadedEchoHandler(Socket i, int c)
       { 
          incoming = i; counter = c; 
       }

       public void run()
       {  
          try
          {  
             try
             {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();
                System.out.println("Server Running");
                Scanner in = new Scanner(inStream);         
                PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);

                out.println( "Hello! Enter BYE to exit." );

                // echo client input
                boolean done = false;
                while (!done && in.hasNextLine())
                {  
                   String line = in.nextLine();
                   System.out.println(line);
                   out.println("Echo: " + line);            
                   if (line.trim().equals("BYE"))
                      done = true;
                }
             }
             finally
             {
                incoming.close();
             }
          }
          catch (IOException e)
          {  
             e.printStackTrace();
          }
       }
4

1 回答 1

0

你在读台词,但你不是在写台词。BufferedWriter.newline()调用后使用write().目前readLine()是阻塞等待换行符或 EOS,并且 EOS 仅在客户端关闭套接字时发生。

于 2013-10-02T06:12:37.447 回答