java-只能发送一次文件
我有一个gui,我在一台电脑上单击发送按钮,在另一台电脑上单击接收按钮,它就会发送文件。问题是我只能发送一次文件,然后我必须重新启动应用程序 它给出的失败原因如下: 发送pc上的“套接字已关闭”,尽管我不明白为什么会这样说。 接收pc上的“ArrayIndexOutOfBounds” 我有两种发送数据的方法:java-只能发送一次文件,java,networking,Java,Networking,我有一个gui,我在一台电脑上单击发送按钮,在另一台电脑上单击接收按钮,它就会发送文件。问题是我只能发送一次文件,然后我必须重新启动应用程序 它给出的失败原因如下: 发送pc上的“套接字已关闭”,尽管我不明白为什么会这样说。 接收pc上的“ArrayIndexOutOfBounds” 我有两种发送数据的方法: public void StreamIn() throws Exception { //FOR RECEIVING FILES byte[] mybytearray =
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不会再次写入,尽管我在尝试发送另一个文件之前关闭并重新创建了它们。我不明白为什么发送pc会说套接字已关闭。您在发送一个文件后正在关闭套接字。如果要发送另一个文件,请打开另一个套接字 注意:您的复制循环在
StreamIn()
中是正确的,但在StreamOut()中是不正确的。
您假设read()
填充了缓冲区,并且您还假设mybytearray
与文件一样大,因此您也假设文件大小适合整数。
Java中复制流的规范方法是:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
这两种方法都可以使用
另外,close()
之前的flush()
也是多余的
另外
StreamOut()
缺少mybytearray的声明。
谢谢您的回答,但是这段代码中的“缓冲区”是什么?而且,如果不最终关闭outputstream,我无法阅读。这也会关闭套接字吗?我看到它也会关闭套接字,解决方案是使用socket.shutdownOutput()edit不是一个真正的解决方案:在这之后不能重用outputstream