socket通信框架mina使用详解(一)

标签: socket 通信 框架 | 发表时间:2013-03-07 11:42 | 作者:crazy123456789
出处:http://blog.csdn.net

1.mina框架基于tcp/ip,udp/ip协议栈的通信框架。

2.mina框架的执行流程:

            

mina框架客户端与服务器端的执行流程一致,不同的是:Ioservice的client端实现是Ioconnector,server端是IoAcceptor.

客户端实现

package com.minaclient;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * 客户端 iohandler
 * @author liudd
 *
 */
public class MyClinetIoHandler extends IoHandlerAdapter {
private final static Logger logger=LoggerFactory.getLogger(MyClinetIoHandler.class);
private final String values;
public MyClinetIoHandler(String values){
this.values=values;
}
@Override
public void sessionOpened(IoSession session) throws Exception {
// TODO Auto-generated method stub
session.write(values);
}
}


package com.minaclient;


import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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;
/**
 * mina框架中客户端与服务器端的执行流程一致,
 * 唯一的区别是:
 *      ioservice的client实现是ioconnetor,server端是ioacceptor
 * @author liudd
 *
 */
public class MyClient {
public static void main(String[] args) {

//1.创建ioservice
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(30000);
//2.注册过滤器
connector.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));

//3注册iohandler,到ioserivce
connector.setHandler(new MyClinetIoHandler("你好!\r\n大家好!"));
//4.绑定套接字,建立连接
connector.connect(new InetSocketAddress("localhost",1000));
}
}



server端实现:

package com.minaserver;


import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * iohandler处理客户端的数据
 * @author liudd
 *
 */
public class MyServerIoHandler extends IoHandlerAdapter {
private final static Logger logs=LoggerFactory.getLogger(MyServerIoHandler.class);
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String str=message.toString();
logs.info("the message received is["+str+"]");
System.out.println("the message received is["+str+"]");
if(str.endsWith("quit"))
{
session.close(true);
return ;
}
}
}



package com.minaserver;


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.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.NioSocketAcceptor;


public class MyServer {
public static void main(String[] args) throws IOException {
//1.编写ioservice
IoAcceptor acceptor=new NioSocketAcceptor();
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);//读写通道在10秒内无任何操作进入空闲状态

    //2.编写过滤器,
//通过TextLineCodeFactory编解码工厂对字符串进行编解码处理
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));//以换行符为标识的数据
//3.注册iohandler到ioservice
acceptor.setHandler(new MyServerIoHandler());
//4绑定套接字
acceptor.bind(new InetSocketAddress(1000));


}
}


作者:crazy123456789 发表于2013-3-7 11:42:16 原文链接
阅读:0 评论:0 查看评论

相关 [socket 通信 框架] 推荐:

socket通信框架mina使用详解(一)

- - CSDN博客编程语言推荐文章
1.mina框架基于tcp/ip,udp/ip协议栈的通信框架. 2.mina框架的执行流程:. mina框架客户端与服务器端的执行流程一致,不同的是:Ioservice的client端实现是Ioconnector,server端是IoAcceptor..  * 客户端 iohandler.  * mina框架中客户端与服务器端的执行流程一致,.

使用 Socket 通信实现 FTP 客户端程序

- xcv58 - IBM developerWorks 中国 : Linux : Articles,Tutorials
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现. FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通道. 前者用于客户端向服务器发送命令,如登录,删除某个文件,后者用于接收数据,例如下载或上传文件等.

socket通信之可靠和不可靠的原理

- - CSDN博客互联网推荐文章
TCP可靠,UDP不可靠的实现.          每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态. 接收缓冲区把数据缓存入内核, 应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内.

有关socket read

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 实际开发中,网络程序最可能遇到的就是数据没收到、收到错误数据这样诡异的问题.. 很多时候,都是由于对socket read的细节理解的不一致,导致了程序前后的矛盾. 下面详细阐述整个read的过程. read函数是负责从fd中读取内容.. 当读成功时, read返回实际所读的字节数.

MINA网络通信框架

- - 淘宝网通用产品团队博客
Apache MINA 2是一个开发高性能和高可伸缩性网络应用程序的网络应用框架. 它提供了一个抽象的事件驱动的异步API,可以使用TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式. Apache MINA 2可以作为开发网络应用程序的一个良好基础. Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、.

Socket的速率控制

- - CSDN博客互联网推荐文章
做一个以精确速率向外输出数据的数据源,要完成这个目标,最基础的是:. 1、找到一种精确的计时器,在精确的时间范围内控制数据源以指定的速度向外发送数据. 2、通过对套接字选项和线程优先级的设置减少网络因素对发送速度造成的影响,从而提高发送精度,保证数据的实际发送量尽可能的达到指定的理论发送量.      针对第一个要求,通过寻找到一种时间精度达到微秒级的精确计数器来保证,在硬件支持的情况下可以通过WindowsAPI获取时钟频率以及震荡次数,通过在事件两端分别调用函数得到震荡次数的差值并结合时钟频率可以计算出精确的时间间隔,通过指定的传输速度和精确的延时可以计算出需要发送的数据量.

ZeroMQ(java)中监控Socket

- - CSDN博客架构设计推荐文章
基本上ZeroMQ(java)中基本的代码都算是过了一遍了吧,不过觉得它在日志这一块貌似基本没有做什么工作,也就是我们通过日志来知道ZeroMQ都发生了什么事情. 而且由于ZeroMQ中将连接的建立和重连接都进行了隔离,用户不需要做什么事情来维护连接,当然这样做的好处是使程序员的编码工作变少了,但是当然也有不好的地方,那就是用户失去了对ZeroMQ整个运行阶段的控制.

java socket参数详解:BackLog

- - 开源软件 - ITeye博客
 java socket参数详解:BackLog. 输入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数. 如果队列满时收到连接指示,则拒绝该连接. backlog参数必须是大于 0 的正值. 如果传递的值等于或小于 0,则假定为默认值. 经过测试这个队列是按照 FIFO(先进先出)的原则.

HTML5 Web socket和socket.io - wishyouhappy

- - 博客园_首页
   HTML5的新特性,用于双向推送消息(例如网页聊天,手机推送消息等). client利用regular http请求webpage. 请求的webpage 执行javascript脚本,open a connection to server.. 有新的信息时服务器和客户端可以相互发送信息(Real-time traffic from the server to the client .

tcp/ip ,http,socket的关系

- - 行业应用 - ITeye博客
  物理层、数据链路层、网络层、传输层、会话层、表示层和应用层.   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,.   三者从本质上来说没有可比性,.   socket则是对TCP/IP协议的封装和应用(程序员层面上).   也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,.