【发布时间】:2014-05-28 04:27:02
【问题描述】:
我需要一些关于如何在通过套接字通道完成发送文件后无需在服务器端进行 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,"inside of while loop");只有当我在服务器端按 ctrl-c 时,客户端才会最终完成那部分代码——但缺少字节——大约比 fileSize 少几千字节。
我已经为客户端和服务器建立了文件大小。 我用于从服务器向客户端发送单个文件的同一部分代码,但在 sc.shutdownOutput() 中有所不同——如果我调用它,我无法通过相同的套接字通道重新发送另一个文件。我不想关闭socketchannel的输出。
还有其他办法吗?
提前致谢。
【问题讨论】:
标签: java flush socketchannel