使用mina框架时,当我发送数据的时候为什么会接着在其后面还发送一个空报文啊 情况如下:
[11:57:12] NioProcessor-3 INFO [] [] [org.apache.mina.filter.logging.LoggingFilter] - SENT: HeapBuffer[pos=0 lim=6 cap=6: 10 49 01 00 4A 16]
[11:57:12] NioProcessor-3 INFO [] [] [org.apache.mina.filter.logging.LoggingFilter] - SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]
请赐教!
package com.nari.mina.client;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.nari.mina.server.MyProtocalPack;
public class myChatClient2 {
private static final String HOST = "localhost";
private static final int PORT = 2500;
static long counter = 0;
final static int FC1 = 100;
static long start = 0;
/**
* 使用Mina的框架结构进行测试
*
* @param args
*/
public static void main(String[] args) throws IOException {
start = System.currentTimeMillis();
IoConnector connector = new NioSocketConnector();
LoggingFilter lf = new LoggingFilter();
connector.getFilterChain().addLast("logger", lf);
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
connector.setHandler(new ChatClientHandler2());
connector.getSessionConfig().setUseReadOperation(true);
connector.getSessionConfig().setReadBufferSize(100);
connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
ConnectFuture connFuture = connector.connect(new InetSocketAddress(HOST, PORT));
connFuture.addListener(new IoFutureListener<ConnectFuture>() {
public void operationComplete(ConnectFuture future) {
try {
if (future.isConnected()) {
IoSession session = future.getSession();
sendData(session);
} else {
System.out.println("连接不存在 ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
System.out.println("start client ...");
}
public static void sendData(IoSession session) throws IOException {
for (int i = 0; i < 100; i++) {
String content = "afdjkdafk张新波测试" + i;
MyProtocalPack pack = new MyProtocalPack((byte) i, content);
session.write(content);
System.out.println("send data:" + content);
}
}
}
相关推荐
3. **异步通信**:MINA的异步通信模式意味着发送请求后无需等待响应,而是继续处理其他任务,当响应到来时,MINA会通过回调函数通知应用程序。 4. **多协议支持**:MINA不绑定于特定的网络协议,开发者可以轻松创建...
3. **Mina发送文件** 发送文件的过程与图片类似,但可能需要考虑更多因素,如文件大小、文件类型等。Mina允许开发者自定义编码解码策略,因此可以根据需要选择合适的文件分块策略进行大文件传输。此外,为了保证...
5. **事件处理**: Mina使用事件驱动模型,当数据到达或发送时,会触发相应的事件,如`MessageReceivedEvent`和`MessageSentEvent`。你可以通过实现`IoHandler`接口来处理这些事件。 示例中的"imagine"可能是项目或...
本文将深入探讨如何使用Mina库在Android客户端与Java服务器之间实现UDP(用户数据报协议)的数据交互。 UDP是一种无连接的、不可靠的传输层协议,相比TCP,它具有更低的延迟和更高的数据传输效率。然而,由于其不...
同时,客户端也可以使用Mina创建一个Socket连接,发送数据到服务器,并通过接收过滤器解析服务器返回的信息。 总结起来,Socket和Mina都是Java网络编程的重要工具,Socket更适合简单的、低级别的网络通信,而Mina则...
MINA的I/O调度器会负责将这些数据打包成网络协议的数据包,如HTTP或自定义协议,然后通过网络发送出去。 文件名的处理是上传过程中不可忽视的一部分。在MINA中,你可以选择在请求头中携带文件名信息,或者将其作为...
在Java开发中,Mina(Java Minimal ...在实际应用中,可能还需要考虑异常处理、心跳机制、多线程处理、消息序列化与反序列化等问题。Mina提供的API非常灵活,可以根据需求进行扩展和定制,以满足更复杂的应用场景。
Mina Client则是客户端部分,用于连接到Mina Server并发送请求。客户端同样基于NIO,可以实现非阻塞的I/O操作,这意味着即使在等待服务器响应时,客户端也可以执行其他任务,从而提高整体性能。在设置Mina Client时...
标题中的"mina客户端简单代码示例"意味着我们将探讨如何使用Mina框架编写一个基础的客户端程序,该程序能够连接到服务器并发送数据。描述指出,运行这个客户端程序(minaTestClient)会展示一个窗口,用户可以通过...
最后,启动Spring Boot应用,Mina将会监听配置的串口,等待接收和发送数据。为了测试,你可以使用串口调试工具(如RealTerm、CoolTerm等)连接到同一串口,发送和接收数据。 以上就是Spring Boot整合Mina实现串口...
客户端应用程序主要用于向服务端发送请求。同样地,在MiNA框架中,客户端的实现也很简单: - **创建IoConnector对象**:这是MiNA框架中的另一个核心组件,用于发起连接请求。 - **配置过滤器链**:定义一系列过滤器...
2. 自定义编码解码器:Mina支持用户自定义编码器和解码器,可以在数据发送前进行封装,接收后进行解析。通过这种方式,可以在数据包之间添加分隔符或者使用特定的协议格式,确保每个数据包都能正确地被识别和处理。 ...
双向控制锁确保了在一次通信操作中,只有一个设备可以发送数据,避免了数据碰撞和混乱。 调试过程中,可能会遇到如串口权限问题、数据格式错误、通信超时等常见问题。解决这些问题通常需要检查代码逻辑、配置参数...
5. **消息处理**:在IoHandler中,你可以解析接收到的HTTP请求消息,将其转化为Mina能处理的数据格式,然后通过Mina的I/O模型发送回服务端。同样,服务端的响应也需要转换成HTTP响应返回给客户端。 6. **测试与优化...
// 设置处理器,处理发送和接收的数据 connector.setHandler(new MyClientHandler()); // 连接到服务器 ConnectFuture future = connector.connect(new InetSocketAddress("localhost", 8080)); future....
文件"MinaSocket"可能包含了实现上述功能的详细代码,包括服务端的Acceptor配置、过滤器设置、事件处理器编写,以及客户端的Socket连接、数据发送和接收等。通过阅读和理解这些代码,你可以更好地掌握Mina与Socket...
Mina允许开发者自定义心跳包,通过发送无数据的包或者包含特定标识的数据包,来检查网络连接是否正常。心跳通常由客户端或服务端定期发起,如果在预定时间内未收到回应,则判断为连接异常,并可能触发断线重连流程。...
描述中的"实现客户端输入数据的返回"意味着,当客户端发送数据到服务端时,服务端的Handler会接收到这些数据,进行解析或者处理,然后将处理后的结果返回给客户端。这种交互模式在很多网络应用中非常常见,例如FTP、...
5. 数据传输:在服务端和客户端的处理逻辑中,通过`IoSession`对象的`write`方法发送数据,通过`messageReceived`事件处理接收到的数据。 6. 关闭资源:在通信完成后,记得关闭`IoSession`,释放系统资源。 通过...
在TCP/IP协议中,一旦建立连接,双方就可以持续通信,但没有规定必须时刻发送数据。这可能导致在网络不稳定或长时间无数据交换时,连接因超时而被网络设备断开。心跳包机制就是为了防止这种“死连接”现象,通过定期...