客户&服务器java程序。如何检测传输结束

时间:2014-04-27 16:37:55

标签: java sockets byte

我有一个客户端程序和一个服务器程序。我发送512字节的数据包,我想发送一些文件。服务器如何知道传输何时完成?

我希望服务器程序在停止运行之前接收一些文件,我想区分它们。我想要做的是打印出收到的数据包的数量:

已收到数据包编号

已收到数据包编号

已收到包号

一旦我收到这个文件,我想把这个计数器变量设置为0,这意味着我必须检测文件何时完全发送(这意味着接收少于512个字节)。有没有办法计算从客户端程序收到的字节数?这是最好的方法吗?我正在使用字节数组。

1 个答案:

答案 0 :(得分:-1)

最好的方法是引入分隔符。这将成为您协议的一部分。

当您发送文件时,您将发送数据。当没有更多字节要发送时,客户端将向服务器发送END_OF_MESSAGE值,表示没有更多数据要发送,然后在您的代码中,您有类似的内容:

String END_OF_MESSAGE = "ENDOFMESSAGE";

if(input.equals(END_OF_MESSAGE)) {
    // You know the client has finished their transmission.
}

注意 :我会使END_OF_MESSAGE的值远比这复杂得多。这仅用于演示目的。

修改

正如JB Nizet建议的那样,另一种选择是先发送文件的长度。这样,当传输的字节数等于或大于预设大小时,服务器知道传输何时结束。