文章目录
        
            
        
    
    
    
    
                  使用netty来简单写个demo,熟悉语法和常见的命令
| 12
 3
 4
 5
 6
 
 | <dependency><groupId>io.netty</groupId>
 <artifactId>netty-all</artifactId>
 <version>4.1.49.Final</version>
 </dependency>
 
 
 | 
client:
| 12
 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
 
 | public class ITDragonAIOClient implements Runnable{  private static Integer PORT = 8888;
 private static String IP_ADDRESS = "127.0.0.1";
 private AsynchronousSocketChannel asynSocketChannel ;
 public ITDragonAIOClient() throws Exception {
 asynSocketChannel = AsynchronousSocketChannel.open();
 }
 public void connect(){
 asynSocketChannel.connect(new InetSocketAddress(IP_ADDRESS, PORT));
 }
 public void write(String request){
 try {
 asynSocketChannel.write(ByteBuffer.wrap(request.getBytes())).get();
 ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
 asynSocketChannel.read(byteBuffer).get();
 byteBuffer.flip();
 byte[] respByte = new byte[byteBuffer.remaining()];
 byteBuffer.get(respByte);
 System.out.println(new String(respByte,"utf-8").trim());
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 @Override
 public void run() {
 while(true){
 }
 }
 public static void main(String[] args) throws Exception {
 for (int i = 0; i < 10; i++) {
 ITDragonAIOClient myClient = new ITDragonAIOClient();
 myClient.connect();
 new Thread(myClient, "myClient").start();
 String []operators = {"+","-","*","/"};
 Random random = new Random(System.currentTimeMillis());
 String expression = random.nextInt(10)+operators[random.nextInt(4)]+(random.nextInt(10)+1);
 myClient.write(expression);
 }
 }
 }
 
 | 
server:
| 12
 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
 
 | 
 
 
 public class ITDragonAIOServer {
 
 private ExecutorService executorService;
 private AsynchronousChannelGroup threadGroup;
 public AsynchronousServerSocketChannel asynServerSocketChannel;
 public void start(Integer port){
 try {
 
 executorService = Executors.newCachedThreadPool();
 
 threadGroup = AsynchronousChannelGroup.withCachedThreadPool(executorService, 1);
 
 asynServerSocketChannel = AsynchronousServerSocketChannel.open(threadGroup);
 
 asynServerSocketChannel.bind(new InetSocketAddress(port));
 System.out.println("server start , port : " + port);
 
 asynServerSocketChannel.accept(this, new ITDragonAIOServerHandler());
 
 Thread.sleep(Integer.MAX_VALUE);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 public static void main(String[] args) {
 ITDragonAIOServer server = new ITDragonAIOServer();
 server.start(8888);
 }
 }
 
 | 
serverhandler:
| 12
 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
 
 | public class ITDragonAIOServerHandler implements CompletionHandler<AsynchronousSocketChannel, ITDragonAIOServer> {  private final Integer BUFFER_SIZE = 1024;
 @Override
 public void completed(AsynchronousSocketChannel asynSocketChannel, ITDragonAIOServer attachment) {
 
 attachment.asynServerSocketChannel.accept(attachment, this);
 read(asynSocketChannel);
 }
 
 private void read(final AsynchronousSocketChannel asynSocketChannel) {
 ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);
 asynSocketChannel.read(byteBuffer, byteBuffer, new CompletionHandler<Integer, ByteBuffer>() {
 @Override
 public void completed(Integer resultSize, ByteBuffer attachment) {
 
 attachment.flip();
 
 String resultData = new String(attachment.array()).trim();
 System.out.println("Server -> " + "收到客户端的数据信息为:" + resultData);
 
 String response = resultData + " = " ;
 write(asynSocketChannel, response);
 }
 @Override
 public void failed(Throwable exc, ByteBuffer attachment) {
 exc.printStackTrace();
 }
 });
 }
 
 private void write(AsynchronousSocketChannel asynSocketChannel, String response) {
 try {
 
 ByteBuffer buf = ByteBuffer.allocate(BUFFER_SIZE);
 buf.put(response.getBytes());
 buf.flip();
 
 asynSocketChannel.write(buf).get();
 } catch (InterruptedException e) {
 e.printStackTrace();
 } catch (ExecutionException e) {
 e.printStackTrace();
 }
 }
 @Override
 public void failed(Throwable exc, ITDragonAIOServer attachment) {
 exc.printStackTrace();
 }
 }
 
 |