mina apache 怎么才能给每个客户端指定ID 5
minaapache服务端接收带一个客户端的信息后,服务端再转发给指定的客户端,下面是我的客户端的一部分代码,请大师门看下要怎么写才能给每个客户端指定一个ID。publi...
mina apache 服务端接收带一个客户端的信息后,服务端再转发给指定的客户端,下面是我的客户端的一部分代码,请大师门看下要怎么写才能给每个客户端指定一个ID。
public boolean connect() {
// 创建一个socket连接
try {
connector = new NioSocketConnector();
// 设置链接超时时间 为 3 秒
connector.setConnectTimeoutMillis(3000);
// 获取过滤器链
DefaultIoFilterChainBuilder filterChain = connector.getFilterChain();
TextLineCodecFactory lineCodec = new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue());
// 代码中的这两行 是用来设置每次传输文本的长度的。
lineCodec.setDecoderMaxLineLength(2 * 1024 * 1024);
lineCodec.setEncoderMaxLineLength(2 * 1024 * 1024);
// 添加编码过滤器 处理乱码、编码问题
filterChain.addLast("codec", new ProtocolCodecFilter(lineCodec));
// filterChain.addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
// filterChain.addLast( "codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
// 消息核心处理器
connector.setHandler(new ClientMessageHandlerAdapter());
// 连接服务器,端口、地址
future = connector.connect(new InetSocketAddress("192.168.41.157",8089));
// 等待连接创建完成
future.awaitUninterruptibly();
// 获取当前session
session = future.getSession();
IoSessionConfig ss = session.getConfig();
return true;
} catch (Exception e) {
return false;
}
}
我万分感谢,
我的分不是很多。我就全部奉上了
在服务端可以通过 session.getId()获取到ID, 但是获取到ID 是 从1开始的,第一台电脑连接进来ID 就是1 ,第二台连接进来 ID 就是2 ,这样是不能给指定的客户端发, 展开
public boolean connect() {
// 创建一个socket连接
try {
connector = new NioSocketConnector();
// 设置链接超时时间 为 3 秒
connector.setConnectTimeoutMillis(3000);
// 获取过滤器链
DefaultIoFilterChainBuilder filterChain = connector.getFilterChain();
TextLineCodecFactory lineCodec = new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue());
// 代码中的这两行 是用来设置每次传输文本的长度的。
lineCodec.setDecoderMaxLineLength(2 * 1024 * 1024);
lineCodec.setEncoderMaxLineLength(2 * 1024 * 1024);
// 添加编码过滤器 处理乱码、编码问题
filterChain.addLast("codec", new ProtocolCodecFilter(lineCodec));
// filterChain.addLast("codec", new ProtocolCodecFilter(new CharsetCodecFactory()));
// filterChain.addLast( "codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
// 消息核心处理器
connector.setHandler(new ClientMessageHandlerAdapter());
// 连接服务器,端口、地址
future = connector.connect(new InetSocketAddress("192.168.41.157",8089));
// 等待连接创建完成
future.awaitUninterruptibly();
// 获取当前session
session = future.getSession();
IoSessionConfig ss = session.getConfig();
return true;
} catch (Exception e) {
return false;
}
}
我万分感谢,
我的分不是很多。我就全部奉上了
在服务端可以通过 session.getId()获取到ID, 但是获取到ID 是 从1开始的,第一台电脑连接进来ID 就是1 ,第二台连接进来 ID 就是2 ,这样是不能给指定的客户端发, 展开
1个回答
展开全部
我感觉没必要那么做吧。ip跟port就可以唯一确定一个客户端了。
服务器肯定保存了一个客户端的session列表。客户端发消息的时候只需要把目的ip和port带过来,那么服务器就可以遍历session列表,找到那个需要发送的客户端了。
服务器肯定保存了一个客户端的session列表。客户端发消息的时候只需要把目的ip和port带过来,那么服务器就可以遍历session列表,找到那个需要发送的客户端了。
更多追问追答
追问
tcp 客户端 IP 地址是变动的,。这不是局域网,局域网是可以给每台电脑分iP地址,现在是网络,就像QQ一样一个QQ号登陆一个客户端,
追答
那只有这样了,就是每个客户端成功连接后,立马发一个唯一码也就是登陆号给服务器,然后服务器session.setAttribute(“id”,id), 把这个保存起来即可。做起来多了一步。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询