간단한 응용 프로그램에서 작업하고 있습니다. 예외를 이해하려고하는데, 그럴 수 없습니다. > 유효한 응답, 서버 + 클라이언트 작업 고급 - 클라이언트와의 Netty 서버에 연결의 Netty 서버를 Netty Server에 두 번 연결할 수 없습니다.
- : 재현하는 방법
.
- 클라이언트 폐쇄 (0 채널은 디버그 스레드에 의해 입증 된 활성)
- NEW 클라이언트 읽기를 시도 -> 오류 : java.net.SocketException의 : 소프트웨어 때문에 연결이 중단되었습니다 : RECV는
- 는 서버, 고토 2를 다시 시작 실패 .
서버 소스 :
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());
}
서버가 요청을 처리하지만 올바른 메시지를 읽을 수 없습니다.
내 고객 : Client.main을 ( https://github.com/BjoernAkAManf/Chat
시작 Server.main (문자열 []에 args) 실행 :
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
예제 응용 프로그램을 사용하여 String [] args)를 두 번 반복합니다. 먼저 적절한 출력을 얻습니다. 두 번째 실행이 실패합니다. 나는 아마도 내가 생각할 수있는 모든 것을 시험했다. 정말 여기에 도움을 주셔서 감사합니다. 고마워요
의견이 없으면 Downvoting. 꽤 멋지 네요. 나는 모든 프로그램을 스스로 디버깅하려고 노력하고 있습니다. 며칠 동안 열심히 일하고 있습니다. 아무에게도 불쾌감을 줄 의도는 아니지만, 질문을 downvote하면 적어도 나에게 이유를 말해주십시오. -이 문제는 재현하기 쉽고, 직접 테스트하십시오. . 문제가 어떻게 든 내 처리기와 관련이 있으면 예외가 던져 지거나 어딘가에 인쇄됩니다. 아무도 내 논리에 결함이 있어야합니다. 아무도이 문제를 이전에보고 한 적이 없으며 여기서 마구간을 사용하고 있습니다. – manf