我有一个简单的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 是文件大小(以字节为单位),因此您知道在等待另一个 TEXT
或 FILE
之前要读取多少流标记。
更新
例如,您的传入流可能如下所示:
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/