繁体   English   中英

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

[英]strange characters when sending information via DataOutputStream.writeUTF()

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

像♠* {Trace:{listfile ....}} 在此处输入图片说明

类客户

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);

        }}

怎么解决? 谢谢

发生的情况是writeUTF()方法在某些字节之前。 像执行操作一样,使用readUTF()而不是readLine()

有关UTF表示形式的字节结构,请参见DataInput

像这样:

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

您不应将writeUTF()用于任意大小的字符串。 仅限16位长度。 而且,除非对等方将使用readUTF()来读取它,否则您将无法使用它。

我将使用BufferedWriter.write()/newLine()进行写入,并使用BufferedReader.readLine()进行读取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM