반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
지난 포스팅에서는 네티 채팅 서버를 만들어 보았는데요.
이번 포스팅에서는 네티 채팅 클라이언트를 만들어 보겠습니다.
서버와 마찬가지로 3개의 자바 클래스가 필요합니다.
ChatClient, ChatClientInitializer, ChatClientHandler
ChatClientInitializer.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.Delimiters; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.ssl.SslContext; public class ChatClientInitializer extends ChannelInitializer<SocketChannel> { private final SslContext sslCtx; public ChatClientInitializer(SslContext sslCtx) { this.sslCtx = sslCtx; } @Override protected void initChannel(SocketChannel arg0) throws Exception { ChannelPipeline pipeline = arg0.pipeline(); //pipeline.addLast(sslCtx.newHandler(arg0.alloc(), ChatClient.HOST, ChatClient.PORT)); pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); pipeline.addLast(new StringDecoder()); pipeline.addLast(new StringEncoder()); pipeline.addLast(new ChatClientHandler()); } } | cs |
ChatClientHandler.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; public class ChatClientHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext arg0, Object arg1) throws Exception { System.out.println((String)arg1); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } } | cs |
ChatCient.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import java.io.BufferedReader; import java.io.InputStreamReader; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; public class ChatClient { static final String HOST = System.getProperty("host", "127.0.0.1"); static final int PORT = Integer.parseInt(System.getProperty("port", "5001")); public static void main(String[] args) throws Exception { new ChatClient().run(); } public void run() throws Exception { EventLoopGroup group = new NioEventLoopGroup(); try { final SslContext sslCtx = SslContextBuilder.forClient() .trustManager(InsecureTrustManagerFactory.INSTANCE).build(); Bootstrap bootstrap = new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .handler(new ChatClientInitializer(sslCtx)); Channel channel = bootstrap.connect(HOST, PORT).sync().channel(); ChannelFuture lastWriteFuture = null; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for (;;) { String line = in.readLine(); if (line == null) { break; } // Sends the received line to the server. lastWriteFuture = channel.writeAndFlush(line + "\r\n"); // If user typed the 'bye' command, wait until the server closes // the connection. if ("bye".equals(line.toLowerCase())) { channel.closeFuture().sync(); break; } } // Wait until all messages are flushed before closing the channel. if (lastWriteFuture != null) { lastWriteFuture.sync(); } } finally { group.shutdownGracefully(); } } } | cs |
여기까지하셨다면, ChatServer.java를 먼저 실행하고,
클라이언트 2개를 만들어서 테스트 해보심 됩니다.
테스트 영상첨부합니다 ^&^
이상입니다.
감사합니다.
반응형
'Netty(네티)' 카테고리의 다른 글
네티 - 이클립스 자바 프로젝트에 네티 라이브러리 추가 및 Source Attachment (0) | 2017.12.15 |
---|---|
Netty 소켓 서버에 안드로이드 접속해서 채팅하기 Netty Socket Server and Android (15) | 2017.12.15 |
Netty(네티) 채팅 서버/클라이언트 [1] : 채팅 서버 만들기 (2) | 2017.12.13 |
Netty(네티) 채팅 서버/클라이언트에 사용되는 클래스 알아보기! (0) | 2017.12.12 |
네티란 ? 자바 네트워크 어플리케이션 프레임워크 (1) | 2017.12.12 |