2016-03-09 4 views
0

Я пытаюсь отправить информацию в формате json через сокет, но когда сервер отправляет и приходит в начале, у них есть определенные специальные символы.странные символы при отправке информации через DataOutputStream.writeUTF()

как ♠ * {Трейс: {ListFile ....}} enter image description here

Client Class

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){} 
} 

Class Server

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

     }} 

Как решить? Thanks

+0

Также никогда не замораживайте свои исключения } catch (Exception e) {} –

+0

getProperties просто для создания строки в json. –

+0

Я тестировал с trim() для ясных пустых байтов, но не работал. –

ответ

1

Что происходит, так это то, что метод writeUTF() содержит несколько байтов. Используйте readUTF() вместо readLine(), как вы делаете.

См. DataInput для структуры байтов представления UTF.

Как так:

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

Большое спасибо, теперь работа! –

+0

Обязательно отметьте это как ответ, чтобы другие знали, что на этот вопрос был дан ответ. Спасибо :) – Samuel

+0

Привет, извините, но я не знаю, как пометить его. –

0

Вы не должны использовать writeUTF() для строк произвольного размера. Он ограничен 16-разрядной длиной. И вы не можете использовать его вообще, если только коллега не будет использовать readUTF(), чтобы прочитать его.

Я бы использовал BufferedWriter.write()/newLine() для записи и BufferedReader.readLine() для чтения.