【问题标题】:Check the type of data sent/received in java on network检查网络上java中发送/接收的数据类型
【发布时间】:2012-03-19 14:22:57
【问题描述】:

我有一个简单的 java 点对点聊天程序,它运行良好。我想在这个程序中添加一个功能。我想让用户也可以通过网络发送文件。

目前使用简单的聊天,我不必担心用户发送或接收/发送的类型或数据。但是通过文件传输功能,我必须知道正在发送什么类型的数据(无论是文件还是纯文本),这样如果是纯文本,我可以简单地向用户显示它,但使用文件我必须打开一个 JFilechooser或某种对话框来接收或发送文件。 以下是接收端的代码

try {
        incoming = new BufferedReader(new InputStreamReader(css.getInputStream()));

        String receive = new String();
        String history = "";
        String name = incoming.readLine();
        chatWindow.RemoteField.setText(name);

        do {
            receive = incoming.readLine();
            history = history + "\n" + receive;
            if (receive != null) {
                chatWindow.recm.setText(history);
            } else {
                receive = "BYE";
            }

            //System.out.println("Received Message: "+receive);

        } while (receive.equals("BYE") != true);
    } catch (Exception npe) {
        System.out.println("Error2" + npe);
    }

那么如何在向用户展示之前添加对接收到的数据类型的检查。

【问题讨论】:

    标签: java network-programming file-transfer fileinputstream


    【解决方案1】:

    您需要发送一些值来指示下一项数据将是什么。例如,您可以在每个文本行前面加上 TEXT\n 的值,对于每个文件 FILE:nnn\n,其中 \n 是换行符,nnn 是文件大小(以字节为单位),因此您知道在期待另一个 TEXTFILE 标记之前读取流。

    更新

    例如,您的传入流可能如下所示:

    TEXT
    Hey mate, here's some cool file
    FILE:10
    1234
    56789TEXT
    Did you get it ok?
    

    我假设聊天消息只会是一行文本。此外,文件不需要以换行结束,因为字节数是已知的,在上面的示例中为 10(包括 4 到 5 之间的换行符)。这里的文件内容是:

    1234
    56789
    

    【讨论】:

    • 所以你的意思是说我应该在文本和文件之前添加两个唯一的填充,并根据填充识别数据的类型。对吗?
    • 是的,我认为这是告诉客户期望什么类型的数据最清晰的方式。
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多