Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
InputStream read()方法从不返回-1(Java)_Java_Client_Inputstream_Transfer - Fatal编程技术网

InputStream read()方法从不返回-1(Java)

InputStream read()方法从不返回-1(Java),java,client,inputstream,transfer,Java,Client,Inputstream,Transfer,我正在尝试用JAVA发送文件。我的问题是,客户端永远不知道是否到达了文件的末尾。因此,客户端的while循环永远不会结束。请帮帮我 服务器(向客户端发送数据) 客户端(从服务器获取数据) 关闭服务器上的套接字输出流。刷新不会终止流,这是发送服务器已完成写入的信号所需的操作。从您发布的内容来看,我看不到您在服务器端关闭输出流的位置。您在服务器上关闭了输出流吗?否则,您的循环可能会将bytesRead永久设置为0,因此您可能需要关闭该流 如果发送数据后需要服务器的OutputStream仍处于打开状

我正在尝试用JAVA发送文件。我的问题是,客户端永远不知道是否到达了文件的末尾。因此,客户端的while循环永远不会结束。请帮帮我

服务器(向客户端发送数据)

客户端(从服务器获取数据)


关闭服务器上的套接字输出流。刷新不会终止流,这是发送服务器已完成写入的信号所需的操作。从您发布的内容来看,我看不到您在服务器端关闭输出流的位置。

您在服务器上关闭了
输出流吗?否则,您的循环可能会将
bytesRead
永久设置为0,因此您可能需要关闭该流


如果发送数据后需要服务器的
OutputStream
仍处于打开状态,也可以在流的开头发送以字节为单位的数据大小,并循环,直到服务器指示要发送的所有字节都存在为止。

按电源按钮!可能重复:文件传输只是整个程序的一部分。当我关闭outputstream时,连接丢失。
File myFile = new File("C://LEGORacers.exe");

      byte[] mybytearray = new byte[(int) myFile.length()];
      BufferedInputStream bis = null;
      OutputStream os = null;

        bis = new BufferedInputStream(new FileInputStream(myFile));
        bis.read(mybytearray, 0, mybytearray.length);

        os = socket.getOutputStream();      
        os.write(mybytearray, 0, mybytearray.length);       
        os.flush();

        bis.close();
byte[] buf = new byte[1024];
    InputStream is = null;
    int bytesRead = 0;

    is = client.getInputStream();
    FileOutputStream fos = null;
    fos = new FileOutputStream("C://copy.exe");


    BufferedOutputStream bos = new BufferedOutputStream(fos);

     try {
            while (-1 != (bytesRead = is.read(buf, 0, buf.length))) {
            // This while loop never ends because is.read never returns -1 and I don't know why...

                bos.write(buf, 0, bytesRead);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
               is.close();
               bos.flush();
               bos.close();
               fos.close();

        }