优化 服务端,客户端代码 解决读取错位的问题。

This commit is contained in:
xking 2024-12-01 20:33:49 +08:00
parent 638507e0f3
commit 497f55c40c
Signed by: chenkuangwei
GPG Key ID: 931C79A9747F5F82
5 changed files with 14 additions and 20 deletions

View File

@ -18,7 +18,7 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.68.Final</version>
<version>4.1.110.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>

View File

@ -2,7 +2,7 @@ package cn.x47.config;
public class Config {
// 设置协议版本1 表示 RIP v12 表示 RIP v2
public static final byte RIP_VERSION = 2;
public static final byte RIP_VERSION = 1;
public static final boolean startServer = true;
public static final boolean startClient = false;
}

View File

@ -29,26 +29,22 @@ public class RIPPacketDecoder extends MessageToMessageDecoder<DatagramPacket> {
while (buf.readableBytes() >= 20) {
RIPEntry entry = new RIPEntry();
entry.setAddressFamily(buf.readShort());
if (ripPacket.getVersion() == 2) {
entry.setRouteTag(buf.readShort());
} else {
entry.setRouteTag((short) 0);
}
entry.setRouteTag(buf.readShort());
byte[] ipBytes = new byte[4];
buf.readBytes(ipBytes);
entry.setIpAddress(InetAddress.getByAddress(ipBytes));
if (ripPacket.getVersion() == 2) {
buf.readBytes(ipBytes);
entry.setSubnetMask(InetAddress.getByAddress(ipBytes));
buf.readBytes(ipBytes);
entry.setNextHop(InetAddress.getByAddress(ipBytes));
} else {
buf.readBytes(ipBytes);
entry.setSubnetMask(InetAddress.getByAddress(ipBytes));
buf.readBytes(ipBytes);
entry.setNextHop(InetAddress.getByAddress(ipBytes));
if (ripPacket.getVersion() == 1) {
// 对于 RIP v1子网掩码和下一跳需要推断或设为默认值
entry.setSubnetMask(InetAddress.getByName("255.255.255.0")); // 示例实际应根据 IP 类推断
entry.setNextHop(packet.sender().getAddress());
}
entry.setMetric(buf.readInt());
entry.setMetric((int) buf.readUnsignedInt());
entries.add(entry);
}
ripPacket.setEntries(entries);

View File

@ -11,9 +11,6 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.nio.NioDatagramChannel;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class RIPClient {
@ -36,8 +33,7 @@ public class RIPClient {
public void sendRipPacket(RIPPacket packet) {
try {
ChannelFuture future = bootstrap.bind(0)
.sync();
ChannelFuture future = bootstrap.bind(0).sync();
future.channel().writeAndFlush(packet).sync();
future.channel().close();
} catch (InterruptedException e) {

View File

@ -4,7 +4,9 @@ package cn.x47.service;
import cn.x47.handle.RIPPacketDecoder;
import cn.x47.handle.RIPServerHandler;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.nio.NioDatagramChannel;