开发工具eclipse:客户端输入的字符串为中文,服务器接收控制台输出正常。客户端输入的字符串为字母,服务器接收控制台输出不正常,控制台输出不正常:如: 
客户端输入字符串: "abc"
服务端显示: "abc□□□□□□□□ 很多
原因是服务端字节数组大小为1024,但是为什么客户端发送中文就正常呢? 求解,怎么解决。
       /**
 * 服务端
 */
public class Service {
public static void main(String []args){
try {
ServerSocket server = new ServerSocket(9111);
Socket socket = server.accept(); //阻塞
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
in.read(data );
System.out.println(new String(data )); //输出
} catch (IOException e) {
e.printStackTrace();
}
}
}
//客户端
public class Client {
public static void main(String []args){
Socket socket = null;
try {
socket = new Socket("127.0.0.1",9111);
System.out.println("请输入一段字符串");
Scanner input = new Scanner(System.in);
String str = input.next();  
OutputStream out = socket.getOutputStream();
out.write(str.getBytes());
out.flush();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   


    服务器端输出的时候去掉多余的空格就ok了
    方法如下System.out.println(new String(data).trim()); 正常输出内容
      

  2.   


    public class Service {
        public static void main(String []args){
            try {
                ServerSocket server = new ServerSocket(9111);
                Socket socket = server.accept(); //阻塞
                InputStream in = socket.getInputStream();
                byte[] data = new byte[1024];
                int length = in.read(data);
                System.out.println(new String(data,0,length));
                e.printStackTrace();
            }
        }
    }
      

  3.   

    System.out.println(new String(data).trim()); 
      

  4.   

    这里根本不是trim的问题,而是
    int readed = in.read(data );System.out.println(new String(data, 0, readed));
    因为这个流并没有1024个字节,它只读了3个字节而已!