引入 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
分享到:
相关推荐
通过Xsocket实现的Android微信,并不是特别完善,可以在上面进行修改,界面仿照微信进行开发的,Xstream实现XML的传输,可以改成JSON,包括系统的登录,添加好友,聊天,朋友圈啊等功能。使用Activity、intent、...
在本资源包中,包含的是"XSocket"和标准"Socket"的源码以及相关的技术文档,这对于理解和掌握这两种网络通信机制非常有帮助。下面,我们将深入探讨这两个主题。 首先,让我们来看看"Socket"。Socket是网络编程的...
在XSocket中,可能包含了客户端和服务器端的源码示例,帮助开发者理解和实现这两个角色之间的通信流程。 多播(Multicast)是一种网络通信模式,与传统的单播和广播不同。在多播中,一个发送者可以同时向多个接收者...
xSocket api 2.6.6version
NIO网络框架 xSocket
xsocket NIO框架示例 resources 中有相关的 资料。telnet服务测试教程。和相关jar
下面是 xSocket 的一些核心功能和使用指南: 核心功能 xSocket 的核心功能支持面向流通信,主要抽象是 Connection 接口。通过 IBlockingConnection 或者 INonblockingConnection 对象进行数据的读写。在 record ...
通过这个示例,开发者可以学习如何在SpringBoot应用中引入和配置第三方库,如XSocket,以实现TCP通信。这涉及到了Spring的自动配置、Bean定义以及事件驱动编程等概念。同时,了解如何处理TCP连接的建立、数据的发送...
xSocket-2.5.4-sources.jar , 2.5.4版的源代码jar包,引入项目即可查看
socket通讯框架xsocket所需的jar包
在给定的标题“ws(websocket)例子(xsocket\xlightweb)”中,我们可以看出这个压缩包可能包含了两个不同的WebSocket实现示例,分别是xsocket和xlightweb。接下来,我们将详细探讨这两个库以及WebSocket的基本概念和...
xSocket是一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。
轻量级JAVA scoket 服务器XSOCKET
xSocket是一个基于Java NIO实现的网络通信框架,它旨在提供简单易用、性能卓越的网络编程接口,适用于开发高并发、低延迟的网络应用。 1. **Java NIO基础** Java NIO的核心组件包括通道(Channel)、缓冲区...
这个压缩包包含了xSocket不同版本的源代码和库文件,让我们来深入了解一下其中的关键知识点。 1. **xSocket 框架**: xSocket 是一个基于事件驱动的网络编程框架,主要目标是简化Java开发中的网络通信。它提供了...
而XSocket则将这些复杂的操作封装成易于使用的类和方法,使得开发者可以更专注于业务逻辑,而不是底层网络实现。 在XSocket库中,主要的类包括`XSockets`,`XServer`和`XClient`。`XSockets`是基础的Socket类,提供...
1. 框架源码:展示了xSocket的实现细节,包括核心类、接口和方法等。 2. 示例代码:提供了使用xSocket搭建服务器和客户端的示例,帮助快速理解和使用框架。 3. 文档资料:包含了框架的使用指南、API文档以及设计原理...
4. **事件处理器**:查看xSocket是如何设计和实现事件处理器的,如ConnectHandler、ReadHandler、WriteHandler等。 5. **协议解析**:研究xSocket如何处理不同协议的数据包,例如TCP/IP、HTTP等。 6. **异常处理**...
xSocket是一款基于Java NIO实现的高性能网络通信框架,它为开发者提供了更简单、更高效的网络编程接口。 在Java NIO中,核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的途径...