如何处理和解码来自TCP服务器的传入字节

我目前正在使用Java控制台应用程序。它通过命令提示符运行,连接到用python编码的服务器应用程序,并通过TCP与该服务器通信。我的应用程序将“ IsnD”字符串发送到它接受的服务器,然后服务器发送三个图像。发送图像的格式为

实际上不包括“ ”的地方。 “ IsnD”使用ascii编码为字节。 Size是从int转换为字节的图像大小,并且无论图像大小如何,它始终由3个字节组成。对于每个单独的图像,都会发送这种格式的消息。

我一直在使用BufferedReader读取服务器响应,但在这一点上,我对如何实际处理此消息一无所知。我一直在寻找将传入消息分成多个组件的方法,因为我知道前两个部分的长度始终固定,但我找不到真正实现该目标的方法。

到了某种程度,感觉就像我把头砸在墙上。因此,我需要任何熟悉Java和Socket编程的人提供有关如何处理此问题的建议。

我当前的代码

public class ImageLabeler {
/**
 * @param args
 */
public static void main(String[] args) {
    String IP = args[0];
    System.out.println(IP + "\n");

    String port = args[1];
    System.out.println(port + "\n");

    Socket clientsocket;
    DataOutputStream outToServer = null;
    BufferedReader inFromServer = null;

    String serverResponse;



    try {
        clientsocket = new Socket(IP,Integer.parseInt(port));
        outToServer = new DataOutputStream(clientsocket.getOutputStream());
        inFromServer = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
        System.out.println("Connection success\n");
    } catch (IOException ex) {
        System.out.println("Connection failed\n");
        system.exit(0);
    }

    PrintWriter writer = new PrintWriter(outToServer,true);

    try {
        //outToServer.writeBytes("USER bilkentstu\\n");
        //outToServer.flush();
        //System.out.println("check\n");
        writer.println("USER bilkentstu");

        serverResponse = inFromServer.readLine();
        System.out.println(serverResponse + "\n");

        writer.println("PASS cs421f2019");

        //outToServer.writeBytes("PASS cs421f2019\\r\\n");
        //outToServer.flush();

        serverResponse = inFromServer.readLine();
        System.out.println(serverResponse + "\n");

        writer.println("IGET");
        //This is where I need to handle the incoming Image messages.

        writer.println("EXIT");
    } catch (IOException ex) {
        Logger.getLogger(ImageLabeler.class.getName()).log(Level.SEVERE,null,ex);
    }
    system.exit(0);
}

}

lcmseven 回答:如何处理和解码来自TCP服务器的传入字节

不要使用缓冲读取器。您需要编写代码,一次从套接字的InputStream读取一个字节。

本文链接:https://www.f2er.com/3132334.html

大家都在问