我试图通过一次一个字节块将二进制文件从服务器传输到客户端。但是,我遇到的问题是它在转移8kb时遇到困难。该文件通常大于1mb,字节数组大小为1024.我相信它必须对我的while循环做一些事情,因为它没有关闭我的连接。有帮助吗?感谢
客户端
import java.io.*;
import java.net.Socket;
public class FileClient {
public static void main(String[] argv) throws IOException {
Socket sock = new Socket("localhost", 4444);
InputStream is = null;
FileOutputStream fos = null;
byte[] mybytearray = new byte[1024];
try {
is = sock.getInputStream();
fos = new FileOutputStream("myfile.pdf");
int count;
while ((count = is.read(mybytearray)) >= 0) {
fos.write(mybytearray, 0, count);
}
} finally {
fos.close();
is.close();
sock.close();
}
}
}
服务器
import java.net.*;
import java.io.*;
public class FileServer {
public static void main(String[] args) throws IOException {
ServerSocket servsock = new ServerSocket(4444);
File myFile = new File("myfile.pdf");
FileInputStream fis = null;
OutputStream os = null;
while (true) {
Socket sock = servsock.accept();
try {
byte[] mybytearray = new byte[1024];
fis = new FileInputStream(myFile);
os = sock.getOutputStream();
int count;
while ((count = fis.read(mybytearray)) >= 0) {
os.write(mybytearray, 0, count);
}
os.flush();
} finally {
fis.close();
os.close();
sock.close();
System.out.println("Socket closed");
}
}
}
}
答案 0 :(得分:3)
您的循环应该检查count >= 0
而不是count > 0
,并且应该在finally块中关闭流和套接字。除此之外,代码对我来说很好。
你是什么意思“它被困在转移8kb”?发生了什么异常?