socket 传输文件

以前没写过socket传输文件,上网查了一些资料。写了一个,哪里写的不对请大家多多指教。

 

 

 

// 服务端代码是用的mina写的
// 其实用socket也一样,只是关建字不一样而且己

public static void main(String[] args){
        File f = null; 
		FileInputStream fin = null;
		FileChannel fc = null;
		String[] datas = data.split(","); 
		String fileName = args[1]; // 文件名
		IoSession session = getSession();
		try {
			f = new File("D:\\"+fileName);
			if(!f.isFile()){ // 判断是否找到文件
				session.write("File does not exist!");
				return null;
			}
			fin = new FileInputStream(f); // 读文件流
			fc = fin.getChannel(); // 得到文件流通道
			
			while (true) {
				ByteBuffer bb = ByteBuffer.allocate(1024);
				int i = fc.read(bb);
				if (i < 0) {
					break;
				}
				IoBuffer ib = IoBuffer.wrap(bb);
				ib.flip();
				session.write(ib);
				// 不间断发送会导致buffer异常
				Thread.sleep(5);
				}
			fc.close();
			fin.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			session.close(false);
		}
  }
 

 

 

 

public static void main(String[] args) {
		Socket s = null;
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		OutputStream os = null;
		try {
			s = new Socket("localhost", 6000);

			bis = new BufferedInputStream(s
					.getInputStream());
			bos = new BufferedOutputStream(new FileOutputStream("D:\\test.rar"));
			os = s.getOutputStream();
			os.write("%%Cmd,Cmd.rar,!!".getBytes());// 发送指令 要求服务端发送文件为 Cmd.rar

			byte[] buf = new byte[8192];
			int len = 0;
			while ((len = bis.read(buf, 0, 8192)) != -1) {
				bos.write(buf, 0, len);
			}
			bos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bos.close();
				bis.close();
				s.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值