mina 发送字符串给服务器,服务器读取的例子,两个文件
package test2;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MainServer {
public static void main(String args[]) throws IOException{
//创建一个非阻塞的Server端socket 用NIO
SocketAcceptor acceptor = new NioSocketAcceptor();
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain= acceptor.getFilterChain();
//设定这个过滤器一行一行的(/r/n)的读取数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定服务器端的消息处理器 new 一个对象
acceptor.setHandler(new SamplMinaServerHandler());
//服务器绑定的端口
int bindport=9988;
//绑定端口,启动服务器
acceptor.bind(new InetSocketAddress(bindport));
System.out.println("start ok,listen on:="+bindport);
}
}
package test2;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class SamplMinaServerHandler extends IoHandlerAdapter {
public SamplMinaServerHandler() {
// TODO Auto-generated constructor stub
}
@Override
public void sessionOpened(IoSession session )throws Exception{
System.out.println("sessionOpened incomming client :"+session.getRemoteAddress());
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
System.out.println("exceptionCaught");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
//需要设定服务器解析消息规则是一行一行的读取,这里可以转为string
String str=(String)message;
System.out.println("收到客户端信息:"+str);
//将消息会送到客户端
session.write(str);
System.out.println("messageReceived");
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
System.out.println("messageSent");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("sessionClose");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("sessionCreate");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
System.out.println("sessionIdle");
}
}
这两个是客户端,用于连接服务器
package client;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class MyClient {
public static void main(String args[]){
//create tcp/ip connector
IoConnector connector = new NioSocketConnector();
//创建接受数据的过滤器
DefaultIoFilterChainBuilder chain=connector.getFilterChain();
//设定这个过滤器一行一行(/r/n)的读取数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//或者如下
//connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
//设定服务器端的消息处理器:new 一个clinethandler对象
connector.setHandler(new SamplMinaClientHandler());
//set connect timeout
connector.setConnectTimeoutMillis(30000);
//或者connector.setConnectTimeout(30);
//连接到服务器
ConnectFuture cf= connector.connect(new InetSocketAddress("localhost",9988));
//wait for the connection attem to be finished
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
package client;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class SamplMinaClientHandler extends IoHandlerAdapter implements
IoHandler {
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
super.exceptionCaught(session, cause);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
//我们已经设定了服务器的解析消息,(规则是一行一行的读取。这里就可以转为String)
String s=(String)message;
// write the receive date back to remote peer
System.out.println("服务器发来的收到信息"+s);
session.write(s);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageSent(session, message);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("sessionClosed");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionCreated(session);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
super.sessionIdle(session, status);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
// TODO Auto-generated method stub
System.out.println("incomming client"+session.getRemoteAddress());
session.write("我来啦...");
}
}
mina 的一个简单例子 时间服务器,实现最基本功能
package server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.example.gettingstarted.timeserver.TimeServerHandler;
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.NioSocketAcceptor;
public class MinaTimeServer {
private static final int PORT=6489;
public static void main(String args[]) throws IOException{
IoAcceptor acceptor= new NioSocketAcceptor();
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
acceptor.setHandler(new TimeServerHandler());
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("service start");
}
}
package server;
import java.sql.Date;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class TimeServerHandler implements IoHandler {
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
cause.printStackTrace();
}
public void messageReceived(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
String strMsg= message.toString();
if(strMsg.trim().equalsIgnoreCase("quit")){
session.close();
return;
}
Date date = new Date(0);
session.write(date.toString());
System.out.println("message writen...");
}
public void messageSent(IoSession arg0, Object arg1) throws Exception {
// TODO Auto-generated method stub
}
public void sessionClosed(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
}
public void sessionCreated(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
}
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
System.out.println("IDLE"+session.getIdleCount(status));
}
public void sessionOpened(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
在进行Mina的性能测试时,我们需要关注以下几个关键点: 1. **事件驱动模型**:Mina使用了NIO(非阻塞I/O)和事件驱动的编程模型。这种模型允许服务器在处理多个连接时无需等待每个连接完成,极大地提高了并发性。 ...
这个例子中的链接(http://blog.csdn.net/stevexk/archive/2008/07/23/2697907.aspx)提供了更详细的实现细节,包括具体的编码和解码逻辑,以及如何在Mina的过滤器和处理器中处理RPC请求。如果你需要深入学习,建议...
学习MINA,你可以从以下几个方面入手: 1. **了解MINA架构**:熟悉MINA的IoSession、IoFilter、IoHandler等核心组件及其职责。 2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤...
本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...
在这个例子中,我们可能会看到如何使用Mina来建立服务器和客户端之间的通信。 在描述中提到的链接是一个博客文章,虽然没有提供具体内容,但我们可以推测它可能详细解释了如何通过Mina创建一个简单的应用。通常,...
虽然具体的文件列表只给出了 "Mina Test",但通常一个 Mina 示例项目会包含以下几个部分: 1. **配置文件**:可能包含服务器配置、过滤器配置等。 2. **源代码**:包括服务器端的 Acceptor 实现、Handler 实现、...
在TCP实例中,我们将涉及到以下几个关键概念: 1. **Acceptor**:这是Mina中的核心组件,用于监听和接受来自客户端的连接请求。当一个连接建立后,Acceptor会创建一个新的Session来管理该连接。 2. **Session**:...
MINA的源码包结构主要分为以下几个部分: - `core` 包:包含核心组件和接口,如`IoService`、`IoHandler`等。 - 其他相关包,例如用于支持特定功能的扩展包。 ![MINA包结构](pic) ##### 2. 主要接口解析 **...
总结一下,Android Mina UDP数据交互涉及到以下几个关键点: 1. 在Android客户端和Java服务端引入Mina库并配置UDP通信。 2. 实现IoHandler接口处理网络事件。 3. 使用DatagramPacket进行数据封装和解封装。 4. 设计...
在Mina客户端开发中,我们主要涉及以下几个关键组件: 1. **Session**: 代表与服务器的连接,它是Mina的核心概念,用于管理与服务器的通信状态,包括读写操作、会话属性等。 2. **Filter Chain**: 过滤器链是Mina...
源码分析中,我们通常关注以下几个关键部分: 1. **IoHandler**:这是处理网络事件的主要接口,如连接建立、数据读取、连接关闭等。开发者实现这个接口,就可以定义当这些事件发生时如何处理。 2. **Filter**:...
在Mina中,HttpServer的实现通常会涉及到以下几个关键部分: 1. **Acceptor**:Acceptor是服务器端的核心组件,负责监听指定的端口,并接收来自客户端的连接请求。在Mina中,Acceptor使用NioSocketSession来管理每...
Mina的架构主要由几个关键组件构成,包括IoService、IoHandler、IoFilter,以及它们之间的交互机制。IoService充当了应用程序的入口,负责底层通信接入。IoHandler则聚焦于业务逻辑处理,无需关注实际的通信细节,只...
总结来说,Socket和Apache Mina在AndroidPN项目中的应用主要体现在以下几个方面: 1. 提供稳定的网络连接:Socket为基础的连接机制,Mina则通过异步I/O和事件驱动模式优化了连接管理。 2. 数据传输:两者都能支持...
Mina 的执行流程主要包括以下几个关键组件: 1. **IoService**:这是网络通信的核心,它在一个线程上管理套接字的创建,拥有自己的Selector来监听连接建立。IoService是服务端和客户端的抽象接口。 2. **...
这个主题包括以下几个关键知识点: 1. **Mina架构**:Mina的核心是I/O处理器,它处理网络连接的建立、读写数据以及断开连接等操作。用户通过实现特定的事件处理器接口(如`SessionListener`、`MessageDecoder`和`...
在MINA客户端的实现中,通常包括以下几个关键组件: 1. **SocketSession**:这是MINA的核心概念,代表了与服务器的连接。它处理数据的收发,并维护了连接的状态。 2. **FilterChain**:MINA中的过滤器链模式允许...
描述中提到了几个关键点: 1. **代码结构清晰**:MINA采用了一种模块化的架构,使得应用代码的组织更为有序。它鼓励开发者将业务逻辑和网络通信逻辑分离,这样可以提高代码的可读性和可维护性。 2. **线程管理**:...
MINA的高性能特性主要体现在以下几个方面: 1. **非阻塞I/O**:MINA基于Java NIO(New IO)库,利用通道(Channel)和选择器(Selector)进行非阻塞I/O操作。这种模式下,当数据不可读写时,线程不会被阻塞,而是...
通常,一个Mina应用的初始化过程会包括以下几个步骤: 1. **引入依赖**:在项目中添加Mina的依赖库,这通常通过Maven或Gradle的配置来完成。 2. **创建Acceptor**:Acceptor是Mina用于监听客户端连接的组件。你...