不知道你为什么要用PrintWriter来向socket写数据,PrintWriter操作的是char型,而你给它byte型,不错才怪了。
或者
在创建时带上编码类型
 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")),true);
写socket时直接  out.write(str);就可以了