簡體   English   中英

當 JSON 對象通過 Java Socket 解析為字符串時,從客戶端讀取時將附加符號添加到開頭

[英]When JSON object parse via Java Socket as a string additional symbols are added to the beginning when reading from client-side

我嘗試使用PrintWriter通過 java TCP 套接字從服務器端(在 java 中)發送 JSON 對象。

問題是當我從客戶端(在 Java 中)將它作為字符串讀取時,它給了我額外的偏移量字符。

�{"data":[{"route":"koswatta","routeNumber":"163","IdNo":"1"},{"route":"Battaramulla","routeNumber":"163","IdNo":"2"}]}

上面我提到了我在客戶端閱讀時的反應。 ” 標記是附加的。 在客戶端,我修剪了字符串值。在修剪之前,我也在“ ”之前得到了“”符號。

實際上上面提到的“”符號在引號內有正方形。(我不知道如何輸入堆棧溢出問題)

我怎樣才能刪除它?
我是 Java 的初學者。我的英語也很抱歉。

服務器代碼:

public class serverTCP {
    public serverTCP() throws IOException, ClassNotFoundException {
        Socket socket;
        System.out.println(RadiusSearchAlgo.getObj().toString());
        //Get size of object, convert to bytes to use as header
        String j1String = RadiusSearchAlgo.getObj().toString();
        long j1Size = j1String.length();
        byte[] j1AsBytes = new 
        BigInteger(Long.toString(j1Size)).toByteArray();


        //Set up socket
        int port = 45000;
        ServerSocket serverSocket = new ServerSocket(port);
        System.out.println("Server Started and listening to the port 25000");
        while(true)
        {

            socket = serverSocket.accept();
            InputStream in = socket.getInputStream();
            OutputStream out = socket.getOutputStream();

            InputStreamReader isr = new InputStreamReader(in);
            BufferedReader br = new BufferedReader(isr);
            String number = br.readLine();
            String number2 = br.readLine();
            System.out.println("num1 : "+number);
            System.out.println("num2 : "+number2);
            System.out.println("Message received from client is "+number);
            //Multiplying the number by 2 and forming the return message
            String returnMessage;
            try
            {
                int numberInIntFormat = Integer.parseInt(number);
                int returnValue = numberInIntFormat*2;
                returnMessage = String.valueOf(returnValue) + "\n";
            }
            catch(NumberFormatException e)
            {
                //Input was not a number. Sending proper message back to client.
                returnMessage = "Please send a proper number\n";
            }

            OutputStreamWriter osw = new OutputStreamWriter(out);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(returnMessage);

            System.out.println("Message sent to the client is "+returnMessage);
            bw.flush();


            //sending JSON Object
            DataOutputStream dout = new DataOutputStream(out);
            DataInputStream din = new DataInputStream(in);

            PrintWriter pout = new PrintWriter(out, true);
            dout.write(j1AsBytes);
            pout.println(j1String+"\n");

            socket.close();

        }
    }
}

客戶代碼:

public class Client_TCP {

public static void main(String[] args) throws IOException, JSONException {

    String ip = "localhost";
    int port = 45000; // 0-1023 :Reserved , 1024 to 65535 Can use. (this is server port number) one server can have multiple process/applications.so go to a specific process we use ports numbers.

    Socket socket = new Socket(ip,port);
    String str = "7";
    String string = "8";

    OutputStreamWriter outputStreamWriter= new OutputStreamWriter(socket.getOutputStream());

    PrintWriter printWriter = new PrintWriter(outputStreamWriter);
    OutputStreamWriter(socket.getOutputStream());

    printWriter.println(str);
    printWriter.println(string);

    outputStreamWriter.flush();


    //Get the return message from the server
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String message = br.readLine();
    System.out.println("Message received from the server : " +message+"\n");

    String ms2 = br.readLine().trim();
    System.out.println(ms2);

    outputStreamWriter.close();
    }
}
  • RadiusSearchAlgo.getObj() 是返回我的 JSON 對象。
  • 用 Java EE 編寫的服務器代碼。
  • 用 Java SE 編寫的客戶端代碼。

“垃圾”由j1AsBytes的字節內容j1AsBytes ,您正在發送,但不單獨讀取。 如果您不需要它,請不要發送它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM