`
youyu4
  • 浏览: 441842 次
社区版块
存档分类
最新评论

java Netty 之 文件传输

 
阅读更多

java Netty 之 文件传输

 

 

/** 
  * 文件传输接收端,没有处理文件发送结束关闭流的情景 
  */ 
public class FileServerHandler extends SimpleChannelHandler { 
	private File file = new File("F:/2.txt"); 
	private FileOutputStream fos; 
	public FileServerHandler() { 
		try { 
			if (!file.exists()) { 
				file.createNewFile();
			} else { 
				file.delete(); file.createNewFile(); 
			} 
			
			fos = new FileOutputStream(file); 
		} catch (IOException e) { 
			e.printStackTrace(); 
		} 
	} 
	
	@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { 
		ChannelBuffer buffer = (ChannelBuffer) e.getMessage(); 
		int length = buffer.readableBytes(); 
		buffer.readBytes(fos, length); 
		fos.flush(); 
		buffer.clear(); 
	}
}

 

/** 
  * 文件发送客户端,通过字节流来发送文件,仅实现文件传输部分, 
  * 没有对文件传输结束进行处理 
  * 应该发送文件发送结束标识,供接受端关闭流。 
  */ 
public class FileClientHandler extends SimpleChannelHandler { 

	// 每次处理的字节数 
	private int readLength = 8; 
	
	@Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { 
		// 发送文件 sendFile(e.getChannel()); 
	} 
	
	private void sendFile(Channel channel) throws IOException { 
		File file = new File("E:/1.txt"); 
		FileInputStream fis = new FileInputStream(file); 
		int count = 0; 
		for (;;) { 
			BufferedInputStream bis = new BufferedInputStream(fis); 
			byte[] bytes = new byte[readLength]; 
			int readNum = bis.read(bytes, 0, readLength); 
			if (readNum == -1) { 
				return; 
			} 
			sendToServer(bytes, channel, readNum); 
			System.out.println("Send count: " + ++count); 
		} 
	} 
	
	private void sendToServer(byte[] bytes, Channel channel, int length) throws IOException {
		ChannelBuffer buffer = ChannelBuffers.copiedBuffer(bytes, 0, length); 
		channel.write(buffer); 
	}
}

 

 

      这只是一个简单的文件传输的例子,可以做为样例借鉴。对于大文件传输的情景,本样例并不支持,会出现内存溢出的情景。

分享到:
评论

相关推荐

    用netty实现文件传输

    - **异步处理**:Netty 的非阻塞 I/O 允许在等待文件传输的同时处理其他任务,提高了系统资源利用率。 5. **实例代码** - 服务器端创建 ServerBootstrap,配置 ChannelInitializer 来添加 ChannelHandler,启动...

    Netty5多文件、大文件上传源码

    - **SSL/TLS加密**:为保护文件传输安全,可以启用SSL/TLS协议进行加密传输。 - **权限控制**:服务器端应有文件上传的权限验证机制,防止非法文件上传。 9. **文件存储**: 服务器接收到文件后,需要有一个合理...

    基于JavaNetty的文件传输系统.zip

    基于JavaNetty的文件传输系统 项目概述 本项目旨在通过UDP协议实现高效的文件传输,利用Netty框架和KCP协议优化传输效率和可靠性。项目支持文件的查找、传输和存储,并集成了Redis和Kafka作为数据共享和消息队列...

    netty文件传输服务端与客户端以及协议说明

    通过netty编写文件传输的客户端与服务端,以及协议说明, 通用的netty传输协议 通过该协议进行文件传输 文件传输客户端与服务端 可以根据文件的最后更新时间来增量传输文件 源码开放,通过eclipse或者idea导入代码...

    基于Netty实现的文件上传

    Netty提供了丰富的ChannelHandler(通道处理器)和ByteBuf(字节缓冲区)等组件,使得开发人员可以方便地处理各种网络协议,包括HTTP和FTP等涉及文件传输的协议。在文件上传场景下,服务器端通常需要创建一个...

    Java Netty基于对象数据传输Demo

    这个"Java Netty基于对象数据传输Demo"应该是演示了如何使用Netty进行对象序列化和反序列化,以便在网络中高效地传输自定义对象。 Netty的核心在于它的`ByteBuf`类,它是字节缓冲区的高效实现,优于Java NIO的`...

    基于java netty的udp客户端声呐数据对接

    Java Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高效的网络服务,包括TCP、UDP等网络协议的应用。在"基于Java Netty的UDP客户端声呐数据对接"项目中,我们主要关注如何利用Netty处理UDP通信,...

    netty4.0文件分片上传+断点续传+权限校验

    文件分片上传是为了处理大文件传输时,避免一次性加载整个文件到内存中,从而减少内存消耗和提高传输效率。在Netty中,我们可以使用ChannelHandlerContext的writeAndFlush方法将文件流分割成多个数据块(chunk),...

    采用netty与protobuf进行文件传输

    在IT行业中,网络通信是核心领域之一,而高效、安全的文件传输则至关重要。本话题聚焦于使用Netty和Protocol Buffers(Protobuf)来实现文件传输,这是一种现代且高性能的技术组合,尤其适用于大规模分布式系统。 ...

    Netty 文件上传获取进度条

    在处理文件上传时,为了提供良好的用户体验,通常需要实现文件上传的进度条功能,让用户能够实时了解文件传输的状态。在传统的HTTP协议中,这通常依赖于JavaScript的定时轮询来实现,但这种方式效率较低且消耗资源。...

    Netty实现Java服务端和C#客户端联通

    标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...

    c++客户端和java(Netty)服务器端tcp通讯

    总结来说,这个项目实现了C++客户端与Java Netty服务器端的TCP通信,利用protobuf进行跨语言的数据交换,既保证了通信的可靠性,又提高了数据传输效率。在实际开发中,这样的架构可以广泛应用于分布式系统、实时数据...

    Netty+H5实现实时进度条文件上传,支持断点续传

    Netty+H5实现实时进度条文件上传,支持断点续传。 1、WebSocketServer:服务启动类 2、服务启动后,浏览器访问http://localhost:9999 3、FileWebSocketFrameHandler类SERVER_SAVE_PATH常量为文件上传保存路经

    java实现基于netty 的udp字节数据接收服务

    在Java编程环境中,Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于构建可伸缩、高并发的服务器。本示例关注的是如何利用Netty实现一个基于UDP(User Datagram Protocol)的数据接收服务,这在需要进行...

    基于java的netty实现的可靠udp网络库(kcp算法),包含fec实现,可用于游戏,视频,加速等业务

    Java KCP是一个基于Java语言,利用Netty框架实现的可靠UDP网络库,它引入了KCP协议和Forward Error Correction (FEC)技术,为需要高效、低延迟传输的应用提供了强大的解决方案。KCP协议最初由Mars(巫师)设计,其...

    实例:如何使用Netty下载文件

    文件下载是网络通信中的常见场景,Netty通过其强大的非阻塞I/O模型,可以高效地处理大文件传输。首先,我们需要理解Netty的基本组件,包括Bootstrap(启动器)、ServerBootstrap(服务器启动器)、Channel(通道)、...

    基于Netty和WebSocket的大文件分块上传断点续传处理器设计源码

    本大文件分块上传断点续传处理器基于Netty和WebSocket实现,包含41个文件,包括Java源代码、XML配置文件、LICENSE文件、Markdown文档、Properties配置文件和HTML页面。系统界面友好,功能完善,适合用于大文件的上传...

    netty文件传输

    总的来说,Netty 的文件传输功能强大且易于使用,结合 Java NIO 的优势,使得它成为开发高性能网络应用的理想选择。通过理解并实践 Netty 的文件传输机制,开发者可以更好地利用 Netty 构建出满足业务需求的应用。...

    基于Java开发的一款基于Netty的内网穿透工具,主要用于将内网服务反向代理到公网访问.zip

    在Java中,我们可以利用Socket编程来实现网络通信,但Netty提供了一种更高级、更优化的方式来处理网络连接和数据传输。 Netty的核心概念包括事件驱动模型、非阻塞I/O以及Channel、Pipeline和Handler等组件。事件...

    基于Netty的Java断点续传文件传输设计源码

    该项目是一款基于Netty框架的Java断点续传文件传输设计源码,包含27个文件,其中26个为Java源文件,1个为ZIP压缩文件。该设计旨在实现文件的断点续传功能,适用于需要高效、可靠文件传输的场景。

Global site tag (gtag.js) - Google Analytics