25,980
社区成员
发帖
与我相关
我的任务
分享package org.learnworld.mina;
import java.io.Serializable;
import java.net.InetSocketAddress;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SendMessageUtil {
private static final Logger logger = LoggerFactory.getLogger(SendMessageUtil.class);
private static IoConnector connector;
static {
IoConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
connector.getFilterChain().addLast("exceutor", new ExecutorFilter());
connector.setHandler(new IoHandlerAdapter());
}
/**
* 本方法用于向指定的服务器发送指定的消息,并指定尝试发送次数和每次发送之间的时间间隔
* @param message 待发送的信息
* @param ip 服务器地址
* @param port 服务器端口
* @param times 发送消息尝试次数
* @param interval 发送间隔时长
* @return 如果服务器收到消息返回true,否则返回false
*/
public static boolean sendMessage(Serializable message, String ip, int port, int times, long interval) {
for (int i = 0; i < times; i++) {
IoSession session = null;
try {
ConnectFuture connectFuture = connector.connect(new InetSocketAddress(ip, port));
connectFuture.awaitUninterruptibly();
Throwable throwable = connectFuture.getException();
if (throwable != null) {
logger.info("连接到" + ip + ":" + port + "失败" + "-->" + throwable.getMessage());
continue;
}
if (connectFuture.isConnected()) {
session = connectFuture.getSession();
WriteFuture writeFuture = session.write(message);
writeFuture.awaitUninterruptibly();
throwable = writeFuture.getException();
if (throwable != null || !writeFuture.isWritten()) {
logger.info("写出" + message + "错误", throwable);
continue;
}
logger.debug("向" + ip + ":" + "port" + "发送" + message + "成功");
return true;
}
Thread.sleep(interval);
} catch (RuntimeException e) {
logger.debug("", e);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
} finally {
if (session != null) {
session.close(false);
}
}
}
return false;
}
}