java中网络传输出现java.net.SocketException 下载后文件不完整
源代码如下
客户端代码
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class FileDown {
public static void main(String[] args) {
try {
System.out.println("Client Start ...");
Socket so = new Socket("127.0.0.1",3333);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
DataInputStream dis = new DataInputStream(so.getInputStream());
DataOutputStream dos = new DataOutputStream(so.getOutputStream());
System.out.println("请输入下载的文件:");
String from = br.readLine();
System.out.println("请输入本地目录和文件名:");
String to = br.readLine();
dos.writeUTF(from);
String st = dis.readUTF();
if(st.startsWith("file")){
FileOutputStream fos = new FileOutputStream(to);
byte[] bb = new byte[10240];
String size = st.split(":")[1];
int length = Integer.parseInt(size);
int times = length/10240;
if(length%10240 != 0) times++;
for(int i=0;i<times;i++){
int num = dis.read(bb);
fos.write(bb,0,num);
}
fos.close();
System.out.println("下载成功!");
}else if(st.startsWith("nofile")){
System.out.println("文件不存在!");
}
br.close();
dis.close();
dos.close();
so.close();
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
服务器端代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
public static void main(String[] args) {
try {
System.out.println("Server Start ...");
ServerSocket ss = new ServerSocket(3333);
Socket so = ss.accept();
DataInputStream dis = new DataInputStream(so.getInputStream());
DataOutputStream dos = new DataOutputStream(so.getOutputStream());
String fileName = dis.readUTF();
File file = new File(fileName);
if(file.exists()){
dos.writeUTF("file:"+file.length());
byte[] bb = new byte[10240];
FileInputStream fis = new FileInputStream(file);
while(true){
int num = fis.read(bb);
if(num == -1) break;
dos.write(bb,0,num);
}
fis.close();
}else{
dos.writeUTF("nofile");
}
dis.close();
dos.close();
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
客户端显示下载完成 但是与源文件大小不同
服务器端显示java.net.SocketException: Connection reset by peer: socket write error
鼓捣了一上午没整出来 求助 小弟谢过