问题描述
我正在Netty中编写一个多播发件人。我在Linux中使用'ngrep'嗅探了端口,但是我看不到数据包...我检查了示例并检查了代码,但是我不明白为什么它不起作用。您有什么想法,我的代码有什么问题吗?
谢谢
以下是我的代码:
发布者
public class Publisher implements Runnable {
private InetSocketAddress groupAddress;
private NioDatagramChannel ch;
private AtomicLong sequenceNumber = new AtomicLong(1);
public Publisher(InetSocketAddress address) throws InterruptedException {
groupAddress = address;
}
@Override
public void run() {
EventLoopGroup group = new NioEventLoopGroup();
try {
NetworkInterface ni = NetworkInterface.getByName("wlp3s0");
Enumeration<InetAddress> addresses = ni.getInetAddresses();
InetAddress localAddress = null;
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (address instanceof Inet4Address) {
localAddress = address;
}
}
Bootstrap b =
new Bootstrap().group(group).channelFactory(new ChannelFactory<NioDatagramChannel>() {
@Override
public NioDatagramChannel newChannel() {
return new NioDatagramChannel(InternetProtocolFamily.IPv4);
}
})
.handler(new LoggingHandler(LogLevel.DEBUG))
.localAddress(localAddress,groupAddress.getPort())
.option(ChannelOption.IP_MULTICAST_IF,ni)
.option(ChannelOption.so_REUSEADDR,true)
.handler(new MessageEncoder(groupAddress));
ch = (NioDatagramChannel) b.bind(groupAddress.getPort()).sync().channel();
ch.joinGroup(groupAddress,ni).sync();
ch.closeFuture().await();
} catch (InterruptedException e) {
e.printstacktrace();
} catch (SocketException e) {
e.printstacktrace();
} finally {
group.shutdownGracefully();
}
}
public void publish(List<Message> messages) throws Exception {
ByteBuffer buffer = Packet.build(sequenceNumber.longValue(),messages);
if (buffer != null)
ch.writeAndFlush(buffer.array());
}
}
MessageEncoder
public class MessageEncoder extends MessagetoMessageEncoder<Message> {
private final InetSocketAddress remoteAddress;
public MessageEncoder(InetSocketAddress remoteAddress) {
this.remoteAddress = remoteAddress;
}
@Override
protected void encode(ChannelHandlerContext ctx,Message msg,List<Object> out) throws Exception {
ByteBuffer b = msg.encode();
ByteBuf buffer = ctx.alloc().buffer(b.array().length);
out.add(new DatagramPacket(buffer,remoteAddress));
}
}
主要
public class Main {
public static void main(String[] args) {
ItchPublisher publisher = null;
try {
ExecutorService executorService = Executors.newFixedThreadPool(10);
publisher = new ItchPublisher(new InetSocketAddress("233.113.216.52",21102));
executorService.submit(publisher);
} catch (InterruptedException e1) {
// Todo Auto-generated catch block
e1.printstacktrace();
return;
}
}
嗅探
$ sudo ngrep -d any port 21102
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)