应用mina的例子做了一些修改,但有关于连接数的问题

应用mina的例子做了一些修改,但有关于连接数的问题
2010年10月14日
  修改后code如下,每个类都是非常简洁,请大家耐心看完
  ~~~~~~~~~~~~~~~~~~client端~~~~~~~~~~~~~~~~~~~~~~~~~~~
  package com.javake.mina.sampleserver;
  import java.net.InetSocketAddress;
  import java.util.concurrent.Executors;
  import org.apache.mina.core.future.ConnectFuture;
  import org.apache.mina.core.filterchain.DefaultIoFilterCh ainBuilder;
  import org.apache.mina.filter.codec.ProtocolCodecFilter;
  import org.apache.mina.filter.codec.textline.TextLineCode cFactory;
  import org.apache.mina.filter.executor.ExecutorFilter;
  import org.apache.mina.filter.logging.LoggingFilter;
  import org.apache.mina.transport.socket.nio.NioSocketConn ector;
  public class MainClient
  {
  public static void main(String[] args) throws Exception
  {
  // 创建IO连接器
  NioSocketConnector connector = new NioSocketConnector();
  // 创建接收数据的过滤器
  DefaultIoFilterChainBuilder chain = connector.getFilterChain();
  //设定这个过滤器将一行一行(/r/n)的读取数据
  chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
  chain.addLast("threadPool", new ExecutorFilter(Executors.newCachedThreadPool()));
  //设定服务器端的消息处理器:一个 SamplMinaServerHandler 对象,
  connector.setHandler(new SamplMinaClientHandler());
  // Set connect timeout.
  connector.setConnectTimeoutMillis(3000);
  //连结到服务器:
  ConnectFuture cf=null;
  for(int i=1;i等待异步执行的结果返回
  cf.awaitUninterruptibly();
  }
  //等待连接断开
  cf.getSession().getCloseFuture().awaitUninterrupti bly();
  //停止客户端
  connector.dispose();
  }
  }
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~clientHandler~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
  package com.javake.mina.sampleserver;
  import org.apache.mina.core.session.IoSession;
  import org.apache.mina.core.service.IoHandlerAdapter;
  public class SamplMinaClientHandler extends IoHandlerAdapter
  {
  public void messageSent(IoSession session, Object message)throws Exception
  {
  //发送信息成功之后调用,不能用于发信息
  }
  //当一个客户端连结进入时
  public void sessionOpened(IoSession session) throws Exception
  { //向服务器发送一个空字符
  session.write(" ");
  }
  //当一个客户端关闭时
  public void sessionClosed(IoSession session)
  {
  System.out.println("one Clinet Disconnect !");
  }
  //当客户端发送的消息到达时:
  public void messageReceived(IoSession session, Object message)throws Exception
  {
  //什么也不做
  }
  }
  ~~~~~~~~~~~~~~~~~~server端~~~~~~~~~~~~~~~~~~~~~~~~~~~
  package com.javake.mina.sampleserver;
  import java.net.InetSocketAddress;
  import org.apache.mina.core.filterchain.DefaultIoFilterCh ainBuilder;
  import org.apache.mina.filter.codec.ProtocolCodecFilter;
  import org.apache.mina.filter.codec.textline.TextLineCode cFactory;
  import org.apache.mina.filter.logging.LogLevel;
  import org.apache.mina.filter.logging.LoggingFilter;
  import org.apache.mina.transport.socket.SocketAcceptor;
  import org.apache.mina.transport.socket.nio.NioSocketAcce ptor;
  public class MainServer
  {
  public static void main(String[] args) throws Exception
  {
  //创建一个非阻塞的Server端Socket,用NIO IO接受器
  SocketAcceptor acceptor = new NioSocketAcceptor();
  //创建接收数据的过滤器
  DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
  //设定这个过滤器将一行一行(/r/n)的读取数据
  chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
  //设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
  acceptor.setHandler(new SamplMinaServerHandler());
  // 服务器端绑定的端口
  int bindPort=3333;
  //绑定端口,启动服务器
  acceptor.bind(new InetSocketAddress(bindPort));
  System.out.println("Mina Server is Listing on:= " + bindPort);
  }
  }
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~serverHandler~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
  package com.javake.mina.sampleserver;
  import org.apache.mina.core.session.IoSession;
  import org.apache.mina.core.service.IoHandlerAdapter;
  public class SamplMinaServerHandler extends IoHandlerAdapter
  {
  int i=0;
  //当一个客端端连结进入时
  public void sessionOpened(IoSession session) throws Exception
  { //显示有多个少客户端连接过来
  System.out.println(++i);
  }
  //当一个客户端关闭时
  public void sessionClosed(IoSession session)
  {
  System.out.println("one Clinet Disconnect !");
  }
  //当客户端发送的消息到达时:
  public void messageReceived(IoSession session, Object message)throws Exception
  {}
  }
  ================解决方案
  在网上找到方法, 虽然出的问题和我的有一点差别,他的是JVM_Bind,我的是connection
  但按他修改注册表的做了
  http://www.360doc.com/content/09/1031/12/10610_814 5493.shtml
  1. 启动注册表编辑器。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\Tcpip\Parameters
  2. 新建
  值名称:MaxUserPort
  值类型: DWORD
  值数据: 65534(用十进制的方法写进去就可以,如果是十六进制,是FFFE,因为4个F是65535嘛)
  有效范围: 5000 - 65534 (十进制)
  默认: 0x1388 5000 (十进制)
  新建
  值名称:TCPTimedWaitDelay
  值类型: DWORD
  值数据: 0000001e(也就是30,不行可以用WINDOWS计算器,很方便,这个表示TIME_WAIT的秒数)
  连接数可以飘到1.6W个,也算差不多了,不知还有没有方法再上一层楼。
  问题二
  通过Mina既可以传送字符串.又可以传输文件
  可以自己定义一个协议啊,很简单的比如
  数据包总长度+字符串字节长度+字符串+字节流长度+字节流数据
  就可以啦,解析起来也很方便
  http://mina.apache.org/tutorial-on-protocolcodecfi lter-for-mina-2x.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值