java BufferedReader specific length returns NUL characters

后端 未结 2 759
遇见更好的自我
遇见更好的自我 2021-01-29 03:10

I have a TCP socket client receiving messages (data) from a server. messages are of the type length (2 bytes) + data (length bytes), delimited by STX & ETX characters.

2条回答
  •  心在旅途
    2021-01-29 03:29

    Here is a sample server that I have used for testing The main rcv is structured like

    while((chars_read = from_server.read(buffer)) != -1)
    {
        to_user.write(buffer,0,chars_read);
        to_user.flush();
    }
    

    The actual whole server is below ...

       public static void main(String[] args) throws IOException
       {
          try
          {
             if (args.length != 2)
                throw new IllegalArgumentException("Wrong number of Args");
    
             String   host = args[0];
             int      port = Integer.parseInt(args[1]);
    
             Socket   s = new Socket(host,port);
    
             final Reader from_server = new InputStreamReader(s.getInputStream());
             PrintWriter to_server = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
    
             BufferedReader from_user = new BufferedReader(new InputStreamReader(System.in));
             final PrintWriter to_user = new PrintWriter(new OutputStreamWriter(System.out));
    
             to_user.println("Connected to " + s.getInetAddress() + ":" + s.getPort());
    
             Thread t = new Thread()
             {
                public void run()
                {
                   char [] buffer = new char[1024];
                   int chars_read;
                   try
                   {
                      while((chars_read = from_server.read(buffer)) != -1)
                      {
                         to_user.write(buffer,0,chars_read);
                         to_user.flush();
                      }
                   }
                   catch(IOException e)
                   {
                      to_user.println(e);
                   }
    
                   to_user.println("Connection closed by server");
                   to_user.flush();
                   System.exit(0);
                }
             };
    
             t.setPriority(Thread.currentThread().getPriority() + 1);
             t.start();
    
             String line;
             while ((line = from_user.readLine()) != null)
             {
                to_server.println(line);
                to_server.flush();
             }
    
             //t.stop();
             s.close();
             to_user.println("Connection closed by client");
             to_user.flush();
          }
          catch(Throwable e)
          {
             e.printStackTrace();
             System.err.println("Usage : java TCPClient  ");
          }
       }
    

提交回复
热议问题