gpt4 book ai didi

java - 只能发送文件一次

转载 作者:行者123 更新时间:2023-12-01 12:34:52 24 4
gpt4 key购买 nike

我有一个图形用户界面,我可以在一台电脑上单击发送按钮,在另一台电脑上单击接收按钮,然后它会发送文件。问题是我只能发送一次文件,然后我必须重新启动应用程序。

它给出的失败原因如下:发送计算机上的“套接字已关闭”,尽管我不明白为什么它会这么说。接收计算机上的“ArrayIndexOutOfBounds”。

我有这两种用于发送数据的方法:

public void StreamIn() throws Exception {      //FOR RECEIVING FILES

byte[] mybytearray = new byte[size];
InputStream is = sock.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVE);
bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray, 0, mybytearray.length);
current = bytesRead;

do {
bytesRead = is.read(mybytearray, current, (mybytearray.length - current));
if (bytesRead >= 0) current += bytesRead;
} while (bytesRead > -1);

bos.write(mybytearray, 0, current);
bos.flush();

if (fos != null) fos.close();
if (bos != null) bos.close();
}

public void StreamOut() throws Exception { //FOR SENDING FILES

fis = new FileInputStream(myFile);
bis = new BufferedInputStream(fis);
bis.read(mybytearray, 0, mybytearray.length);
os = sock.getOutputStream();

os.write(mybytearray, 0, mybytearray.length);
os.flush();

if (bis != null) bis.close();
if (os != null) os.close();
}

出于某种原因,OutputStream 不会再次写入,尽管我在尝试发送另一个文件之前关闭并重新创建它们。我不明白为什么发送计算机会说套接字已关闭。

最佳答案

发送一个文件后您将关闭套接字。如果您想发送另一个文件,请打开另一个套接字。

注意,您的复制循环在 StreamIn() 中是正确的但 StreamOut(). 中不正确您假设 read()填充缓冲区,并且您还假设 mybytearray与文件一样大,因此您还假设文件大小适合 int.

在 Java 中复制流的规范方法是:

while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}

在两种方法中都使用它。

还有flush()之前close()是多余的。

还有StreamOut()缺少 mybytearray. 的声明

关于java - 只能发送文件一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25676656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com