通过DataOutputStream.writeUTF()发送信息时出现奇怪的字符

时间:2016-03-09 00:42:06

标签: java sockets

我正在尝试通过套接字发送信息json格式,但是当服务器发送并在开头到达时,它们会有一些特殊的字符。

喜欢♠* {Trace:{listfile ....}} enter image description here

班主任

public static void Connect() throws UnknownHostException, IOException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException{
    String OUTPUT = getProperties();
    try{
    Tunnel = new Socket( HOSTNAME , PORT );
    InputStream = new DataInputStream(Tunnel.getInputStream());
    OutputStream = new DataOutputStream(Tunnel.getOutputStream());
    String OutSerial = "{ Trace: { "+OUTPUT+"}}";
    OutputStream.writeUTF(OutSerial);
    Tunnel.close();
    }catch(Exception e){}
}

班级服务器

public static void Listening(String port) throws IOException, InterruptedException{
        BufferedReader Input;
        int PORT = Integer.parseInt(port);
        sc =new ServerSocket(PORT);
        so =new Socket();
        so = sc.accept();
        Debug.DebugM("It is connected a bot.");
        Input = new BufferedReader(new InputStreamReader(so.getInputStream()));
        Output = new DataOutputStream(so.getOutputStream());
        String INPUT = null;
        while((INPUT = Input.readLine()) != null){

            System.out.println(INPUT);

        }}

如何解决? 感谢

2 个答案:

答案 0 :(得分:1)

正在发生的事情是writeUTF()方法在前面添加了一些字节。使用readUTF()代替readLine(),就像你正在做的那样。

有关UTF表示的字节结构,请参阅DataInput

像这样:

Input = new DataInputStream(so.getInputStream());
String INPUT = Input.readUTF();
System.out.println(INPUT);

答案 1 :(得分:0)

您不应该将writeUTF()用于任意大小的字符串。它限制在16位长度。除非对等方要使用readUTF()来阅读它,否则你根本无法使用它。

我会使用BufferedWriter.write()/newLine()来撰写,BufferedReader.readLine()来阅读。