我正在尝试通过套接字发送信息json格式,但是当服务器发送并在开头到达时,它们会有一些特殊的字符。
班主任
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);
}}
如何解决? 感谢
答案 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()
来阅读。