我需要一些关于如何推送流结束字符的建议,而不必在完成通过套接字通道发送文件后在服务器端进行sc.shutdownOutput()调用。
这是服务器端的位
long curnset = 0l;
long temp = 0l;
int maxCount = 8192 * 1024;
logger.debug(AUDIT, "begin sending {}", filenameSize);
while (curnset < fsize)
{
temp = inChannel.transferTo(curnset, maxCount, sc);
curnset += temp;
logger.debug(AUDIT,"c {} | t {} | max {} | size {}",curnset,temp,maxCount,fsize);
}
logger.debug(AUDIT, "end sending {}", filenameSize);
这是客户端:
logger.debug(AUDIT, "begin receiving {}", filenameSize);
while (curnset < this.fileSize)
{
logger.debug(AUDIT,"inside of while loop");
temp = outChannel.transferFrom(sc, curnset, maxCount);
curnset += temp;
logger.debug(AUDIT, "c {} | t {} | max {} | size {}", curnset, temp,
maxCount, this.fileSize);
}
logger.debug(AUDIT, "end receiving {}", filenameSize);
以下是程序的行为方式: 服务器将完成其部分代码,同时客户端将挂在logger.debug(AUDIT,&#34; while循环内部#34;);只有当我在服务器端ctrl-c时,客户端最终才会完成代码部分 - 但缺少字节 - 大约几千字节的文件大小。
我已经为客户端和服务器建立了fileSize。 我用于从服务器向客户端发送单个文件的相同代码部分,但与sc.shutdownOutput()不同 - 如果我调用它,我不能通过相同的套接字通道重新发送另一个文件。我不想关闭socketchannel的输出。
还有其他方法吗?
提前致谢。
答案 0 :(得分:0)
您通过在循环中调用transferTo()
来做正确的事情,但每次maxCount
返回时,您需要按照传输计数递减transferTo()
。