有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这么做。socket上的readUTF()失败,文件大小较小?

我正在通过socket将文件从客户端传输到基本服务器。当我传输小文件(1kb)时,它在String fileName = clientData.readUTF();上失败,但对于大文件(31mb),它工作得非常好

在我看来,它似乎没有足够的时间。有人能澄清一下吗? 短暂性脑缺血发作

服务器

public void receiveFile() 
{
    System.out.println("in receive file");
    try {
        int bytesRead;

        DataInputStream clientData = new DataInputStream(clientSocket.getInputStream());

        String fileName = clientData.readUTF();
        OutputStream output = new FileOutputStream(("received_from_client_" + fileName));
        long size = clientData.readLong();
        byte[] buffer = new byte[1024];
        while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int) Math.min(buffer.length, size))) != -1) {
            output.write(buffer, 0, bytesRead);
            size -= bytesRead;
        }

        output.close();
        clientData.close();

        System.out.println("File " + fileName + " received from Client " + clientID);
    } catch (IOException ex) {
        System.err.println("ERROR Connection closed Client " + clientID);
    }
}

痕迹

java.io.EOFException
    at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
    at java.io.DataInputStream.readUTF(DataInputStream.java:589)
    at java.io.DataInputStream.readUTF(DataInputStream.java:564)
    at example3.CLIENTConnection.receiveFile(CLIENTConnection.java:75)
    at example3.CLIENTConnection.run(CLIENTConnection.java:50)
    at java.lang.Thread.run(Thread.java:722)

共 (1) 个答案

  1. # 1 楼答案

    对等方已关闭连接。没有更多的数据。结束你的生活,忘掉它