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

修改后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.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
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<50000;i++)
{ //连接服务器
cf = connector.connect(new InetSocketAddress("localhost", 3333));
//等待异步执行的结果返回
cf.awaitUninterruptibly();
}
//等待连接断开 
cf.getSession().getCloseFuture().awaitUninterruptibly();
//停止客户端
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.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
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.NioSocketAcceptor;
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_8145493.shtml

1. 启动注册表编辑器。 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/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-protocolcodecfilter-for-mina-2x.html

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值