- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个图形用户界面,我可以在一台电脑上单击发送按钮,在另一台电脑上单击接收按钮,然后它会发送文件。问题是我只能发送一次文件,然后我必须重新启动应用程序。
它给出的失败原因如下:发送计算机上的“套接字已关闭”,尽管我不明白为什么它会这么说。接收计算机上的“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/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!