Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java eclipse中的java.io.EOFException 试试看{ 套接字=新套接字(“localhost”,9999); while(true){ ObjectInputStream ois=新的ObjectInputStream(socket.getInputStream()); 字节[]buf=新字节[1024]; FileOutputStream fout=新的FileOutputStream(“c:/hyebin/hyebin/exercise.jpg”); while((ois.read(buf,0,buf.length))!=-1){ 四次写入(基本单位,0,基本单位长度); } System.out.println(“파일 수신 및 저장 성공"); } }捕获(例外情况除外){ 例如printStackTrace(); } java.io.EOFException 位于java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890) 位于java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385) 位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942) 位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:385) 位于comm/comm.client.main(client.java:14)_Java_Sockets_Tcp - Fatal编程技术网

java eclipse中的java.io.EOFException 试试看{ 套接字=新套接字(“localhost”,9999); while(true){ ObjectInputStream ois=新的ObjectInputStream(socket.getInputStream()); 字节[]buf=新字节[1024]; FileOutputStream fout=新的FileOutputStream(“c:/hyebin/hyebin/exercise.jpg”); while((ois.read(buf,0,buf.length))!=-1){ 四次写入(基本单位,0,基本单位长度); } System.out.println(“파일 수신 및 저장 성공"); } }捕获(例外情况除外){ 例如printStackTrace(); } java.io.EOFException 位于java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890) 位于java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385) 位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942) 位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:385) 位于comm/comm.client.main(client.java:14)

java eclipse中的java.io.EOFException 试试看{ 套接字=新套接字(“localhost”,9999); while(true){ ObjectInputStream ois=新的ObjectInputStream(socket.getInputStream()); 字节[]buf=新字节[1024]; FileOutputStream fout=新的FileOutputStream(“c:/hyebin/hyebin/exercise.jpg”); while((ois.read(buf,0,buf.length))!=-1){ 四次写入(基本单位,0,基本单位长度); } System.out.println(“파일 수신 및 저장 성공"); } }捕获(例外情况除外){ 例如printStackTrace(); } java.io.EOFException 位于java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890) 位于java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385) 位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942) 位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:385) 位于comm/comm.client.main(client.java:14),java,sockets,tcp,Java,Sockets,Tcp,这是我的客户端代码。第一个代码正常运行。但是,这样的错误从第二次保存时就发生了。我不知道错误发生在哪里。这段代码有各种各样的问题 while(true)很奇怪,会导致您看到的异常 虽然使用了ObjectInputStream,但绝对没有任何原因。纯jane inputstreams具有read()函数。不要在ObjectInputStream中包装套接字 ois.read不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写

这是我的客户端代码。第一个代码正常运行。但是,这样的错误从第二次保存时就发生了。我不知道错误发生在哪里。

这段代码有各种各样的问题

  • while(true)很奇怪,会导致您看到的异常
  • 虽然使用了ObjectInputStream,但绝对没有任何原因。纯jane inputstreams具有read()函数。不要在ObjectInputStream中包装套接字
  • ois.read
    不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写入文件,这意味着,例如,如果网络数据包大小小于文件大小,您的代码将中断。您需要d要保存
    read
    调用返回的值,如果它是-1,则停止,如果不是,则写入那么多字节(提供该值而不是
    buf.length
    作为写入方法的第三个参数)
  • 您的异常处理非常糟糕。失败时,此代码将打印并继续
  • 错误在第14行-请参阅堆栈跟踪中的
    client.java:14
    位?这是有用的信息
  • 必须保护资源:必须关闭资源,即使代码通过异常或其他方式退出,也必须关闭资源。为此,有一种结构称为ARM结构(自动资源管理),也称为try with
  • 现在,inputstreams有一种方法可以让他们将自己转储到一个文件中
  • 综合所有因素:

    try {
                socket = new Socket("localhost", 9999);
    
                while(true) {
                    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                    byte[] buf = new byte[1024];
                    FileOutputStream fout = new FileOutputStream("c:/hyebin/hyebin/excercise.jpg");
    
                    while((ois.read(buf, 0, buf.length))!=-1){
                        fout.write(buf, 0, buf.length);
                    }
                    System.out.println("파일 수신 및 저장 성공");
    
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    
    java.io.EOFException
    at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890)
    at java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385)
    at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942)
    at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:385)
    at comm/comm.client.main(client.java:14)
    

    很简单,不是吗?一般来说,查看您正在使用的javadoc资料,了解如何使用它,并找到任何有用的快捷方式,例如
    transferTo
    方法,这是一个好主意。

    这段代码有各种各样的问题

  • while(true)很奇怪,会导致您看到的异常
  • 虽然使用了ObjectInputStream,但绝对没有任何原因。纯jane inputstreams具有read()函数。不要在ObjectInputStream中包装套接字
  • ois.read
    不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写入文件,这意味着,例如,如果网络数据包大小小于文件大小,您的代码将中断。您需要d要保存
    read
    调用返回的值,如果它是-1,则停止,如果不是,则写入那么多字节(提供该值而不是
    buf.length
    作为写入方法的第三个参数)
  • 您的异常处理非常糟糕。失败时,此代码将打印并继续
  • 错误在第14行-请参阅堆栈跟踪中的
    client.java:14
    位?这是有用的信息
  • 必须保护资源:必须关闭资源,即使代码通过异常或其他方式退出,也必须关闭资源。为此,有一种结构称为ARM结构(自动资源管理),也称为try with
  • 现在,inputstreams有一种方法可以让他们将自己转储到一个文件中
  • 综合所有因素:

    try {
                socket = new Socket("localhost", 9999);
    
                while(true) {
                    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                    byte[] buf = new byte[1024];
                    FileOutputStream fout = new FileOutputStream("c:/hyebin/hyebin/excercise.jpg");
    
                    while((ois.read(buf, 0, buf.length))!=-1){
                        fout.write(buf, 0, buf.length);
                    }
                    System.out.println("파일 수신 및 저장 성공");
    
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    
    java.io.EOFException
    at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890)
    at java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385)
    at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942)
    at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:385)
    at comm/comm.client.main(client.java:14)
    

    很简单,不是吗?一般来说,查看您正在使用的javadoc资料,找出如何使用它,并找到任何有用的快捷方式,例如
    transferTo
    方法。

    为什么
    while(true){…}
    ?您试图读取JPEG文件时,
    ObjectInputStream
    使用的流类型错误。为什么
    while(true){…}
    ?您试图读取JPEG文件时,
    ObjectInputStream
    使用的流类型错误。您的代码无效。图像未保存。此处正常。代码无效。图像未保存。此处正常。图像未保存。此处正常。