java中网络传输出现java.net.SocketException 下载后文件不完整

K_X_S_ K_X_S_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
源代码如下
客户端代码
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
鼓捣了一上午没整出来 求助 小弟谢过
...全文

相关推荐

java.net.SocketException Connection reset 解决方法

java.net.SocketException Connection reset 解决方法

weixin_39260028

java.net.SocketException: Connection reset 解决方法

最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决

weixin_38564503

JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法

JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法,三种方案,临时,永久,根治

mingfei7056

在Win7系统下抛出java.net.SocketException的解决办法

java.net.SocketException: Unrecognized Windows Sockets error: 0: no Inet4Address associated with interface 本文提供了在Win7或Vista系统下解决这个异常信息的办法。

qingqingzijinxin

解决JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES问题

源码下载地址: https://pan.quark.cn/s/d5d6b8631a26 JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES的应对措施JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES问题是一种普遍存在于网络编程领域的异常状况,主要在Java应用程序执行期间出现,特别是在Linux系统环境下更为常见。该问题的产生源于进程所开启的文件数量超越了操作系统设定的阈值,进而引发服务器运行中断。异常成因探讨:Linux操作系统对单个进程能够开启的文件数量设定了上限,其默认值设定为1024。一旦进程开启的文件数量超出此数值界限,便会触发 java.net.SocketException: Too many open files 异常。此类异常的发生可能导致服务器功能失常,对应用程序的稳定运行与可靠性造成负面影响。应对策略一:短期应对措施通过执行指令 ulimit -n 4096 能够暂时将文件可开启数量的上限调高至4096。此方法可以暂时缓解 Too many open files 异常问题。然而,必须明确的是,这种处理方式仅能提供临时性的解决途径,一旦用户重新登录系统,文件可开启数量的上限将自动回落至预设的1024。应对策略二:长效应对措施若需永久性地处理 Too many open files 异常,可通过编辑 /etc/security/limits.conf 文件并加入以下内容:* - nofile 10061 实现设定。接着,修改 /etc/pam.d/login 文件,追加条目:session required /lib/security/pam_limits.so。以此方...

xinshenghuo22
评论 11
收藏 已收藏
分享
返回顶部
K_X_S_
Java SE 62,621 成员 307,251 内容