java - 检查网络上java发送/接收的数据类型

标签 java network-programming file-transfer fileinputstream

我有一个简单的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);
    }

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

最佳答案

您需要发送一些值来指示下一项数据是什么。例如,您可以在每个文本行前面添加值 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

关于java - 检查网络上java发送/接收的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9765465/

相关文章:

java - 如何从 Firebase 数据库中删除消息?

java - deepToString 中的这个条件何时计算为 true?

java - 在单元测试中找不到任何支持 AES/CBC/ISO7816-4Padding 的提供商

java - MulticastSocket.joinGroup() 错误

android - 无法与任何提供的主机建立套接字

java - 从 Java 服务器到多个 C++ 客户端的高效文件传输?

java - 第二次迭代 - 值保持不变

go - bufio readbytes 缓冲区大小

Linux tc(流量控制)工具 - 配置后 ssh 连接问题

xmpp - 如何使用 TurnSocket (XEP-0065 : SOCKS5 Bytestreams) connection? XEP-0096 : SI File Transfer? [socket writeData]?