通过套接字

时间:2015-11-07 23:13:52

标签: java sockets bytearray

我会尝试分解我的问题并解释发生了什么,因为在这里发布我的整个代码是不可能的(数千行)。

我正在实现客户端/服务器应用程序,我正在尝试通过套接字(SSLSocket)发送文件。我在下面写了一段我的代码。

尝试发送大文件(尝试发送100MB pdf)时出现问题。当我发送txt文件时,只有几kb的长度一切都很好。一旦我尝试发送一个更大的文件,它就会崩溃。我的意思是:客户端在发送文件bytes []的行停止,服务器只获取(起始)文件字节的一部分,忽略其余的继续执行。例如,如果客户端发送字节[1,2,3,4,5,...,6,7,8,9,10],服务器将获得类似[1,2,3,4,5,...,0,0,0,0,0]的内容(它实际上不是在一个点之后接收0,但是当它以正确的大小初始化时,初始化的字节保持在起始位置值)。

client

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));

dos.write(largeByteArray);
dos.flush();

server

DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

dest = new byte[(int) sizeOfFileReceived]; 
dis.read(dest);

我的猜测是服务器无法确认客户端,因为它试图一次性接收所有字节,这就是它们崩溃的地方。

我尝试更改接收端的代码以获取大块的字节(8000字节),然后将它们连接成一个单独的数组,但效果不好(虽然可能是我的实现的错误)。我使用以下帖子来获取提示但可能做错了:herehere

有关正在发生的事情的任何想法?

编辑:我尝试的是这样的:

byte[] buf = new byte[8000];
int bytesRead;
int pos = 0;
while ((bytesRead = dis.read(buf, 0, buf.length)) != -1) {
    System.arraycopy(dest, pos, buf, 0, bytesRead);
    pos += bytesRead;
}

更新:当使用上次编辑的代码时,问题是在dis.read(buf, 0, buf.length)的最后一次调用中它完全停止而没有异常而没有返回任何结果而不是-1

0 个答案:

没有答案