-1

我正在尝试通过套接字传输文件的内容。在 90% 的情况下,这段代码运行良好,但有时会失败。

该连接不仅用于传输文件,还用于服务器和客户端之间基于 DataInputStream/DataOutputStream 的通信。

问题是,字节似乎卡在流中。我传输的文件将被破坏,下次我传输某些东西(例如,一个整数)时,服务器会收到与客户端发送的完全不同的东西。

请注意,我之前通过 DataOutputStream.writeInt() 发送文件的大小以确定数组的大小。这似乎运行良好。

这是在客户端发送文件的代码。我之前曾通过 FileInputStream 将文件读取到 byte[] 数组

public static void writeToStream(byte[] binary, OutputStream out) throws IOException
{
    int offset = 0, left = binary.length, read;
    while(left > 0)
    {
        if(left > 1024) read = 1024;
        else read = left;
        out.write(binary, offset, read);
        offset += read;
        left -= read;
    }
    out.flush();
}

在服务器端,此代码应将流中的字节复制到数组中,然后将其写入文件。

public static void readToArray(byte[] binary, InputStream in) throws IOException
{
    int left = binary.length, offset = 0, read, toread;
    while(left > 0)
    {
        if(left > 1024) toread = 1024;
        else toread = left;
        read = in.read(binary, offset, toread);
        left -= read;
        offset += read;
    }
}

我真的很感谢你在这里的帮助!

4

1 回答 1

1

你不需要任何你在writeToStream().所有你需要的东西中写的废话out.write(binary),,这使得方法本身基本上是多余的。同样,您的readToArray()方法只是对DataInputStream.readFully()添加您自己的错误的拙劣模仿。扔掉它并使用它。

于 2013-09-12T11:05:10.900 回答