0

皆さんの時間を無駄にして申し訳ありませんが、netty(jboss) を使用するのはこれが初めてで、何をしているのかわかりません。double を書きたいサーバーは次のとおりです。

public final class UpdateServer extends SimpleChannelHandler {

private static ChannelGroup channels;

private static final int PORT = 55555;
private static final double VERSION = 1.66;

public static void main(String[] args) {
    init();
}

public static final void init() {
    new UpdateServer();
}

/*
 * throws exeption so if cant handle channel server closes
 */
private UpdateServer() {
    ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());

    ServerBootstrap bootstrap = new ServerBootstrap(factory);

    ChannelPipeline pipeline = bootstrap.getPipeline();
    pipeline.addLast("handler", this);

    bootstrap.setOption("child.tcpNoDelay", true);
    bootstrap.setOption("child.keepAlive", true);

    bootstrap.bind(new InetSocketAddress(PORT));
    System.out.println("Listening for connections on port: "+PORT);
}

@Override
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) {
    channels.add(e.getChannel());
}

@Override
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) {
    channels.remove(e.getChannel());
}

@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
    System.out.println("Connected!");
    e.getChannel().write(VERSION);
    ctx.getChannel().write(VERSION);
}

@Override
public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) {

}

@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    System.out.println("Message Recieved");
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent ee) throws Exception {

}

}

しかし、クライアントを実行すると、読み取った double 値は 0.0 です。

public class UpdateChecker {

public static void main(String[] args) throws Exception {
    SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 55555));
    socketChannel.configureBlocking(false);
    ByteBuffer buffer = ByteBuffer.allocateDirect(8);
    socketChannel.read(buffer); 
    double value = buffer.getDouble();
    System.out.println(value);
}

}

なぜ 0.0 で印刷されるのかわかりません。これは私が書いたものではないためです。これを修正するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

サーバーソケットを「127.0.0.1」に明示的にバインドしてみてください

于 2013-02-07T23:54:43.743 に答える