`
cuker919
  • 浏览: 97758 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

xsocket 实现上传和解压文件

 
阅读更多

引入 xsocket 相关jar

第一步:创建接受数据的类SocketHandler
package com.socket;

import java.io.IOException;
import java.nio.BufferUnderflowException;
import java.nio.channels.ClosedChannelException;

import org.xsocket.MaxReadSizeExceededException;
import org.xsocket.connection.IConnectExceptionHandler;
import org.xsocket.connection.IConnectHandler;
import org.xsocket.connection.IDataHandler;
import org.xsocket.connection.IDisconnectHandler;
import org.xsocket.connection.INonBlockingConnection;

public class SocketHandler implements IConnectHandler,IDisconnectHandler,IDataHandler,IConnectExceptionHandler{

@Override
public boolean onDisconnect(INonBlockingConnection nbc) throws IOException {

return false;
}

@Override
public boolean onConnectException(INonBlockingConnection nbc,
IOException arg1) throws IOException {
return false;
}

@Override
public boolean onData(INonBlockingConnection nbc) throws IOException,
BufferUnderflowException, ClosedChannelException,
MaxReadSizeExceededException {
try{

if (nbc.available() == -1) {
return false;
}

// 接受文件
SocketService.acceptFile(nbc);
// 解压
SocketService.jieyaFile();

} catch (Exception e) {
e.printStackTrace();
}

return true;
}

@Override
public boolean onConnect(INonBlockingConnection nbc) throws IOException,
BufferUnderflowException, MaxReadSizeExceededException {
System.out.println(nbc.getRemoteAddress()+" 来访!");
return false;
}

}

第二步: 创建服务端类SocketServer

package com.socket;

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;

import org.xsocket.WorkerPool;
import org.xsocket.connection.IServer;
import org.xsocket.connection.Server;

public class SocketServer {

private static IServer server = null;

private static final int PORT = 2049;

public static void start() {

try {
server = new Server(PORT,new SocketHandler());

server.setAutoflush(false);

// minSize, maxSize, keepalive, timeunit, taskqueuesize, isDaemon
WorkerPool workerPool = new WorkerPool(200, 1000, 1800, TimeUnit.SECONDS, 1000, false);
// 预启动所有核心线程
workerPool.prestartAllCoreThreads();

server.setWorkerpool(workerPool);

server.start();

System.out.println("Test SocketServer Started...");

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void stop() {
if (server != null && server.isOpen()) {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {

start();
}
}

第三步:创建处理业务逻辑的类SocketService

package com.socket;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.xsocket.connection.INonBlockingConnection;
import org.xsocket.connection.NonBlockingConnection;

public class SocketService {

public static final byte[] buf = new byte[1024];

public static final int port = 2049;

private static final int BYTE_LENGTH = 1024;

public static final String filePath = "d:\\testzip3.zip";

public static final String zipFilePath = "d:\\testzip3";

public static File zipFile;

public static void test() {

INonBlockingConnection nbc = null;

try {
System.out.println("连接中...");
nbc = new NonBlockingConnection("192.168.1.49",port ,new SocketHandler());
nbc.write("123");
} catch (IOException e) {
System.out.println("SocketService异常");
e.printStackTrace();
}
}

/**
* 上传文件
* @param remoteAddr 远程服务器地址
* @param filePath 要上传的文件地址
*/
public static void uploadFile(String remoteAddr, String filePath) {

INonBlockingConnection nbc = null;

DataInputStream dis = null;
try {
// 连接
nbc = new NonBlockingConnection(remoteAddr,port ,new SocketHandler());

dis = new DataInputStream(new FileInputStream(new File(filePath)));

int len = 0 ;

while ((len=dis.read(buf)) != -1) {
nbc.write(buf, 0, len);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (nbc != null) {
try {
nbc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

/**
* 接受文件
* */
public static void acceptFile(INonBlockingConnection nbc) {

try {
// 创建一个字节缓冲区
ByteBuffer byteBuffer = ByteBuffer.allocate(BYTE_LENGTH);
zipFile = new File(filePath);
DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
int len = 0;
while ((len = nbc.read(byteBuffer)) != -1) {
output.write(byteBuffer.array(),0,len);
// 清理缓冲区
byteBuffer.clear();
}
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("文件上传成功!");
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @param targetFile 要解压的文件
* @param zipPath 解压路径
* 不支持中文文件名
*/
public static void jieyaFile() {

ZipInputStream zis= null;
FileOutputStream fos = null;
try {

// 判断目录是否存在
File zipPathFile = new File(zipFilePath);
if (!zipPathFile.exists()) {
zipPathFile.mkdir();
}

zis = new ZipInputStream(new FileInputStream(new File(filePath)));

ZipEntry entry = null;

while ((entry=zis.getNextEntry())!=null) {
File file = new File(zipFilePath+File.separator+entry.getName());
// 是否是目录
if(entry.isDirectory()) {
file.mkdir();
} else {
fos = new FileOutputStream(file);
int len =0;
while ((len = zis.read(buf)) != -1) {
fos.write(buf,0,len);
}
if (fos !=null) {
fos.close();
}
}
}
System.out.println("文件解压成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zis != null) {
try {
zis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

public static void main(String[] args) {

//test();

uploadFile("192.168.1.49", "d:\\testzip.zip");
}
}

// 测试 进入命令行输入:telnet ip port


分享到:
评论

相关推荐

    android版微信源码(通过Xsocket实现)

    通过Xsocket实现的Android微信,并不是特别完善,可以在上面进行修改,界面仿照微信进行开发的,Xstream实现XML的传输,可以改成JSON,包括系统的登录,添加好友,聊天,朋友圈啊等功能。使用Activity、intent、...

    xsocket源码和socket源码,文档

    在本资源包中,包含的是"XSocket"和标准"Socket"的源码以及相关的技术文档,这对于理解和掌握这两种网络通信机制非常有帮助。下面,我们将深入探讨这两个主题。 首先,让我们来看看"Socket"。Socket是网络编程的...

    XSocket.rar

    在XSocket中,可能包含了客户端和服务器端的源码示例,帮助开发者理解和实现这两个角色之间的通信流程。 多播(Multicast)是一种网络通信模式,与传统的单播和广播不同。在多播中,一个发送者可以同时向多个接收者...

    xSocket api 2.6.6version

    xSocket api 2.6.6version

    NIO网络框架 xSocket

    NIO网络框架 xSocket

    xsocket NIO框架示例

    xsocket NIO框架示例 resources 中有相关的 资料。telnet服务测试教程。和相关jar

    xsocket使用指南

    下面是 xSocket 的一些核心功能和使用指南: 核心功能 xSocket 的核心功能支持面向流通信,主要抽象是 Connection 接口。通过 IBlockingConnection 或者 INonblockingConnection 对象进行数据的读写。在 record ...

    tcp协议使用xsocket的demo

    通过这个示例,开发者可以学习如何在SpringBoot应用中引入和配置第三方库,如XSocket,以实现TCP通信。这涉及到了Spring的自动配置、Bean定义以及事件驱动编程等概念。同时,了解如何处理TCP连接的建立、数据的发送...

    xsocket 2.5.4 源代码

    xSocket-2.5.4-sources.jar , 2.5.4版的源代码jar包,引入项目即可查看

    xsocket.jar包

    socket通讯框架xsocket所需的jar包

    ws(websocket)例子(xsocket\xlightweb)

    在给定的标题“ws(websocket)例子(xsocket\xlightweb)”中,我们可以看出这个压缩包可能包含了两个不同的WebSocket实现示例,分别是xsocket和xlightweb。接下来,我们将详细探讨这两个库以及WebSocket的基本概念和...

    xSocket-2.8.1.jar

    xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。

    轻量级JAVA scoket 服务器XSOCKET

    轻量级JAVA scoket 服务器XSOCKET

    java源码:NIO网络框架 xSocket.rar

    xSocket是一个基于Java NIO实现的网络通信框架,它旨在提供简单易用、性能卓越的网络编程接口,适用于开发高并发、低延迟的网络应用。 1. **Java NIO基础** Java NIO的核心组件包括通道(Channel)、缓冲区...

    xSocket sources

    这个压缩包包含了xSocket不同版本的源代码和库文件,让我们来深入了解一下其中的关键知识点。 1. **xSocket 框架**: xSocket 是一个基于事件驱动的网络编程框架,主要目标是简化Java开发中的网络通信。它提供了...

    xsocket.7z

    而XSocket则将这些复杂的操作封装成易于使用的类和方法,使得开发者可以更专注于业务逻辑,而不是底层网络实现。 在XSocket库中,主要的类包括`XSockets`,`XServer`和`XClient`。`XSockets`是基础的Socket类,提供...

    NIO网络框架 xSocket.7z

    1. 框架源码:展示了xSocket的实现细节,包括核心类、接口和方法等。 2. 示例代码:提供了使用xSocket搭建服务器和客户端的示例,帮助快速理解和使用框架。 3. 文档资料:包含了框架的使用指南、API文档以及设计原理...

    基于Java的实例开发源码-NIO网络框架 xSocket.zip

    4. **事件处理器**:查看xSocket是如何设计和实现事件处理器的,如ConnectHandler、ReadHandler、WriteHandler等。 5. **协议解析**:研究xSocket如何处理不同协议的数据包,例如TCP/IP、HTTP等。 6. **异常处理**...

    基于java的NIO网络框架 xSocket.zip

    xSocket是一款基于Java NIO实现的高性能网络通信框架,它为开发者提供了更简单、更高效的网络编程接口。 在Java NIO中,核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的途径...

Global site tag (gtag.js) - Google Analytics