一个简易的文件传输程序

文件传输需要一个服务器和一个客户端,在建立起连接以后对文件进行传输。
首先是服务端
写的时候犯的错误
1.监听的时候忘了给循环,导致文件只能传输一次传输一次文件以后就结束了。
2.得到客户的ip,我只写了getInetAddress(),没有写getHostAddress(),得到的IP会多一条“/”。
3.把while写成了if,导致只会运行一次,文件下载的时候只有1kb。
4.忘了关闭数据流,导致文件传输后损坏了。

public static void main(String[] args) throws IOException {
		File file = new File("这里的内容是你要传输的文件的目录及名字");
		
//		这是首先创建一个服务但是不给端口,在后面再进行设置
//		ServerSocket server = new ServerSocket();
//		server.bind(new InetSocketAddress(8888));
		
		//占据8888端口创建一个服务 192.168.4.198
		ServerSocket server = new ServerSocket(8888);
		System.out.println("服务已创建,等待连接...");
		
		//循环监听
		while(true){
			//开始监听,一旦客户端连接则返回Socket对象
			Socket s = server.accept();
			System.out.println("客户端已连接!"+s.getInetAddress().getHostAddress());
			//获取Socket的输出流
			OutputStream os = s.getOutputStream();
			
			FileInputStream is = new FileInputStream(file);
			BufferedInputStream bis = new BufferedInputStream(is);
			BufferedOutputStream bos = new BufferedOutputStream(os);
			byte[] b = new byte[1024];
			int len;
			while((len = bis.read(b)) != -1) {
				bos.write(b,0,len);
			}
			bis.close();
			bos.close();
		}
		
	}

}

客户端
犯的错误
1.在写目标文件的时候没有写文件名,导致程序报错,文件夹拒绝访问。(后缀名不能错)
2.ip地址是动态的,一直用前一天的ip导致报错。
3.完了关流和文件,用完要关,用完要关,用完要关!

public class MyClient {
	public static void main(String[] args) throws UnknownHostException, IOException {

		File file = new File("这里的内容是你要写如的文件路径及文件名");
		// 连接到指定ip,指定端口的服务
		Socket s = new Socket("192.168.1.110", 8888);
		// 获取基于Socket的字节输入流
		InputStream is = s.getInputStream();
		
		//创建一个基于目标文件的字节输出流
		FileOutputStream fos = new FileOutputStream(file);
		//将低级字节流转换为高级缓冲流
		BufferedInputStream  bis = new BufferedInputStream(is) ;
		//向底层输出流写入字节
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		byte[] b = new byte[1024];
		int len = 0;
		//判断文件读完了没有
		while((len = bis.read(b) ) != -1) {
		//控制最后一次写入时不会写入多余的内容导致文件损坏
			bos.write(b,0,len);
		}
		bos.close();
		bis.close();
		
	}

}

写代码遇见错误很正常,但是要学会调试,学会分析问题出在哪里,并把出问题的范围确定下来,找到逻辑的错误在哪,并用小本本记下来,没事就瞅一眼,谨防再次踩坑!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值