将文件从Java发送到C#

将文件从Java发送到C#,c#,java,file,sockets,binary,C#,Java,File,Sockets,Binary,我想将一个二进制文件从Java服务器发送到C#客户机。以下是我使用的代码: Java服务器: ServerSocket serverSocket = new ServerSocket(1592); Socket socket = serverSocket.accept(); PrintWriter out = new PrintWriter(socket.getOutputStream(),true); File file = new File("img.jpg

我想将一个二进制文件从Java服务器发送到C#客户机。以下是我使用的代码:

Java服务器:

    ServerSocket serverSocket = new ServerSocket(1592);
    Socket socket = serverSocket.accept();
    PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

    File file = new File("img.jpg");

    //send file length
    out.println(file.length());

    //read file to buffer
    byte[] buffer = new byte[(int)file.length()];
    DataInputStream dis = new DataInputStream(new FileInputStream(file));
    dis.read(buffer, 0, buffer.length);

    //send file
    BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
    bos.write(buffer);
    bos.flush();

    Thread.sleep(2000);
客户:

此代码似乎只写入文件的前696个字节。从那里开始,它将只写入0,直到结束

有什么建议吗

感谢From:“读取操作读取尽可能多的可用数据,最多读取大小参数指定的字节数。”

这意味着你不必得到你所要求的那么多数据,你需要检查你自己,直到你得到你所期望的那么多数据

int toRead = (int)length;
int read = 0;
while (toRead > 0)
{
    int noChars = networkStream.Read(buffer, read, toRead);
    read += noChars;
    toRead -= noChars;
}

检查DataInputStream实际读取的字节数,它可能小于分配的数组长度

这同样适用于客户机

int toRead = (int)length;
int read = 0;
while (toRead > 0)
{
    int noChars = networkStream.Read(buffer, read, toRead);
    read += noChars;
    toRead -= noChars;
}