Я работаю над простым приложением. Я пытаюсь понять мое исключение, но я просто не могу.Не удается подключиться к Netty Server дважды
Как воспроизвести:
- Запуск Нетти лицо, вручающее судебные документы
- Подключение к Нетти сервера с клиентом -> Действительно Response, Server + Client работает нормально.
- Client закрыт (0 каналов активны, проверенные с помощью отладки нити)
- Нового клиента пытается прочитать -> Ошибка: java.net.SocketException: Программное обеспечение вызвало подключение прерывания: RECV не удалось
- Перезапуска сервера, Гото- .
источник Сервер:
public class Server {
private final int port;
public Server(int port) {
this.port = port;
}
public void run() throws Exception {
final EventLoopGroup boss = new NioEventLoopGroup();
final EventLoopGroup worker = new NioEventLoopGroup();
try {
final ServerBootstrap b = new ServerBootstrap();
b.group(boss, worker)
.channel(NioServerSocketChannel.class)
.childHandler(new SocketChannelInitializer());
final ChannelFuture f = b.bind(port).sync();
final ChannelFuture c = f.channel().closeFuture();
System.out.println("- DONE -");
c.sync();
} finally {
worker.shutdownGracefully();
boss.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception {
int port;
if (args.length > 0) {
port = Integer.parseInt(args[0]);
} else {
port = 8080;
}
new Server(port).run();
}
}
Мои Initialisizer:
public static final String PACKET = "packet";
public static final String STRING_DECODER = "stringDecoder";
public static final String NETWORK_HANDLER = "networkHandler";
@Override
public void initChannel(SocketChannel ch) throws Exception {
System.out.println("Creating new Channel!");
final ChannelPipeline p = ch.pipeline();
p.addLast(NETWORK_HANDLER, new NetworkHandler());
p.addLast(STRING_DECODER, new StringDecoder(CharsetUtil.UTF_8));
p.addLast(new Testdecoder());
p.addLast(new ChatAdapter());
}
Сервер обрабатывает запрос, но не может прочитать правильное сообщение.
Мой Клиент:
public static void main(String[] args) throws IOException {
final Socket s = new Socket();
s.connect(new InetSocketAddress("localhost", 8080));
final InputStream is = s.getInputStream();
final OutputStream os = s.getOutputStream();
os.write(0x0);
os.write("username".getBytes(CharsetUtil.UTF_8));
os.flush();
System.out.println("!");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = new byte[4096];
while (true) {
int n = is.read(b);
if (n < 0) {
break;
}
baos.write(b, 0, n);
}
byte data[] = baos.toByteArray();
System.out.println(new String(data, CharsetUtil.UTF_8));
System.out.println("- DONE -");
s.close();
}
Использование Netty 4.0.23.Final
Пример применения: https://github.com/BjoernAkAManf/Chat
Запуск Server.main (String [] арг) и запустить Client.main (String [] args) дважды. Сначала вы получите правильный результат. 2-й прогон завершится неудачно. Я тестировал все, что мог подумать. Очень ценю помощь здесь. Спасибо
Downvoting без комментариев. Это очень приятно. Я пытаюсь самостоятельно отлаживать всю программу, работая довольно долго в течение нескольких дней - я не хочу никого обижать, но если вы занимете вопрос, по крайней мере, скажите мне причины - эту проблему легко воспроизвести, просто проверьте ее самостоятельно , Если проблема будет каким-то образом связана с моими обработчиками, исключение будет выброшено или напечатано где-нибудь. В моей логике должен быть недостаток - никто никогда не сообщал об этой проблеме раньше, и я использую здесь конюшни. – manf