1. 程式人生 > >Netty 伺服器客戶端,傳送自定義訊息

Netty 伺服器客戶端,傳送自定義訊息

Netty 5 的包

伺服器,四個Java檔案

1            SubReqServer.java

[java] view plain copy  print?
  1. package com.test.netty;  
  2. import io.netty.bootstrap.ServerBootstrap;  
  3. import io.netty.channel.ChannelFuture;  
  4. import io.netty.channel.ChannelInitializer;  
  5. import io.netty.channel.ChannelOption;  
  6. import io.netty.channel.EventLoopGroup;  
  7. import io.netty.channel.nio.NioEventLoopGroup;  
  8. import io.netty.channel.socket.SocketChannel;  
  9. import io.netty.channel.socket.nio.NioServerSocketChannel;  
  10. import io.netty.handler.codec.serialization.ClassResolvers;  
  11. import io.netty.handler.codec.serialization.ObjectDecoder;  
  12. import io.netty.handler.codec.serialization.ObjectEncoder;  
  13. import io.netty.handler.logging.LogLevel;  
  14. import io.netty.handler.logging.LoggingHandler;  
  15. publicclass SubReqServer {  
  16.     publicvoid bind(int nPort) throws Exception {  
  17.         EventLoopGroup bossGroup = new NioEventLoopGroup();  
  18.         EventLoopGroup workerGroup = new NioEventLoopGroup();  
  19.         try{  
  20.             ServerBootstrap b = new ServerBootstrap();  
  21.             b.group(bossGroup, workerGroup)  
  22.             .channel(NioServerSocketChannel.class)  
  23.             .option(ChannelOption.SO_BACKLOG, 100)  
  24.             .handler(new LoggingHandler(LogLevel.INFO))  
  25.             .childHandler(new ChannelInitializer<SocketChannel>(){  
  26.                 @Override
  27.                 publicvoid initChannel(SocketChannel ch) throws Exception{  
  28.                     ch.pipeline()  
  29.                     .addLast(  
  30.                             new ObjectDecoder(1024*1024,  
  31.                                     ClassResolvers.weakCachingConcurrentResolver(this.getClass().getClassLoader())))  
  32.                     .addLast(new ObjectEncoder())  
  33.                     .addLast(new SubReqServerHandler());  
  34.                 }  
  35.             });  
  36.             ChannelFuture f = b.bind(nPort).sync();  
  37.             System.out.println("---------------wait for connect");  
  38.             f.channel().closeFuture().sync();  
  39.         }finally {  
  40.             System.out.println("---------------wait for connect  Error!");  
  41.             bossGroup.shutdownGracefully();  
  42.             workerGroup.shutdownGracefully();  
  43.         }  
  44.     }  
  45.     publicstaticvoid main(String[] args){  
  46.         int nPort = 5656;  
  47.         nPort = Integer.valueOf(nPort);  
  48.         System.out.println("---------------Main start");  
  49.         try {  
  50.             new SubReqServer().bind(nPort);  
  51.         } catch (Exception e) {  
  52.             System.out.println("---------------Main Error");  
  53.             e.printStackTrace();  
  54.         }  
  55.     }  
  56. }  

2            SubReqServerHandler.java

[java] view plain copy  print?
  1. package com.test.netty;  
  2. import io.netty.channel.ChannelHandlerAdapter;  
  3. import io.netty.channel.ChannelHandlerContext;  
  4. publicclass SubReqServerHandler extends ChannelHandlerAdapter{  
  5.     @Override
  6.     publicvoid channelActive(ChannelHandlerContext ctx){  
  7.         System.out.println("--------------------------------handler channelActive------------");  
  8. //      for(int i = 0; i<10; i++){
  9. //          SubscribeReq req = new SubscribeReq();
  10. //          req.setAddress("深圳JJYY");
  11. //          req.setPhoneNumber("13888886666");
  12. //          req.setProductName("Netty Book");
  13. //          req.setSubReqID(i);
  14. //          req.setUserName("XXYY");
  15. //          ctx.write(req);
  16. //      }
  17. //      ctx.flush();
  18.     }  
  19.     @Override
  20.     publicvoid channelRead(ChannelHandlerContext ctx, Object msg)  
  21.         throws Exception{  
  22. //          SubscribeReq reqx = new SubscribeReq();
  23. //          reqx.setAddress("*****深圳蛇口");
  24. //          reqx.setPhoneNumber("13888886666");
  25. //          reqx.setProductName("Netty Book");
  26. //          reqx.setSubReqID(6666);
  27. //          reqx.setUserName("XXYY");
  28. //          ctx.write(reqx);
  29. //          ctx.flush();
  30. //      
  31.             SubscribeResp resp = new SubscribeResp();  
  32.             resp.setnSubReqID(555);  
  33.             resp.setRespCode(0);  
  34.             resp.setDesc("-------Netty book order succeed, 3days later, sent to the designated address");  
  35.             ctx.writeAndFlush(resp);    // 反饋訊息
  36.             //ctx.write(resp);
  37.             //ctx.flush();
  38.             SubscribeReq req = (SubscribeReq)msg;   // 訂購內容
  39.             if("XXYY".equalsIgnoreCase(req.getUserName())){  
  40.                 System.out.println("接收到的資料: [  " + req.toString() + "   ]");  
  41.             }  
  42.     }  
  43.     @Override
  44.     publicvoid exceptionCaught(ChannelHandlerContext ctx, Throwable cause){  
  45.         System.out.println("---------------exceptionCaught 網路異常,關閉網路"

    相關推薦

    Netty 伺服器客戶傳送定義訊息

    Netty 5 的包 伺服器,四個Java檔案 1            SubReqServer.java [java] view plain copy  print? package com.t

    MFC中傳送定義訊息機制PostMessage和SendMessage方式

           MFC中有種訊息佇列,使用PostMessage()或者SendMessage()給窗體傳送自定義訊息,當窗體接收到訊息時呼叫該訊息對應繫結的方法。 PostMessage:把訊息投放到執行緒的訊息佇列,不等訊息被處理就立即返回;Send

    Python TCP伺服器/客戶+UDP傳送/接收

    ''' socketserver ''' import time import socket import socketserver class RequestHandler(socketserver.StreamRequestHandler): def handle(self):

    ROS---傳送定義訊息接收訊息

    上一篇已經建好了hello包及其內部的檔案,本篇講訊息 接收訊息 hello_node.cpp 作一些修改 #include "iostream" #include "../include/hello/add.h" #include "ros/ros.h

    Pythpn整合itchat定時傳送定義訊息到微信群

    完整程式碼如下: import itchat import time from apscheduler.schedulers.blocking import BlockingScheduler # 登陸,enableCmdQR 值為true 或 負數 為負數的原因有的手機無法識別二維碼,

    kafka傳送定義訊息體(物件、陣列)

    在前面簡單搭建了Windows上的kafka環境,並使用命令列測試可以執行之後(環境請參考:http://blog.csdn.net/u014104286/article/details/75040932)我們會考慮怎麼使用kafka;先試著傳送一個簡單的訊息,傳送成功之後

    Netty開發redis客戶Netty傳送redis命令netty解析redis訊息

    Netty開發redis客戶端,Netty傳送redis命令,netty解析redis訊息, netty redis ,redis RESP協議。redis客戶端,netty redis協議 我們可以使用redis-cli這個客戶端來操作redis,也可以使用window的命令列telnet連線redis。

    客戶POST傳送json資料給服務客戶接收伺服器json資料響應

     public static void jsonRequest() throws IOException, URISyntaxException {         //請求的地址         String url = "http://localhost:8080/springmvc/response/r

    客戶的鍵盤錄入字元如aaa. 伺服器接收aaa並在控制檯上列印aaa.然後將其轉換為大寫AAA返回到客戶客戶列印到客戶控制檯上

    伺服器端: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net

    Socket通訊 一個伺服器對多個客戶不能延遲接受資訊的實現

    實驗要求: 1.一個時間點,無論哪個基站有資料傳送,伺服器必須同時接收。不能延遲等待這個客戶端接收完畢再接收另一個客戶端; 2.客戶端不能關閉,一直連線,以防資料遺漏 知識點: 多執行緒 同時開啟多個任務,不用按照程式的執行順序來; 基本的程式碼如下: pack

    嵌入式Linux網路程式設計I/O多路複用epoll()示例epoll()客戶epoll()伺服器單鏈表

    文章目錄 1,I/O多路複用 epoll()示例 1.1,epoll()---net.h 1.2,epoll()---client.c 1.3,epoll()---sever.c 1.4,epoll()---linklist.h

    嵌入式Linux網路程式設計I/O多路複用poll()示例poll()客戶poll()伺服器單鏈表

    文章目錄 1,IO複用poll()示例 1.1,poll()---net.h 1.2,poll()---client.c 1.3,poll()---sever.c 1.4,poll()---linklist.h 1.5,p

    嵌入式Linux網路程式設計I/O多路複用select()示例select()客戶select()伺服器單鏈表

    文章目錄 1,IO複用select()示例 1.1 select()---net.h 1.2 select()---client.c 1.3 select()---sever.c 1.4 select()---linklist.h

    frp多客戶實現一臺雲伺服器連線多個區域網內的主機多埠轉發

    很簡單,用不同的frps.ini就行 假設你原來已經啟動了一個frps.ini,現在想再加一個。 那就新建一個frps1.ini,然後埠和之前的不一樣就行。 假設之前有一個7000的埠了,那現在這個用7001就可以啦~ cp frps.ini frps1.ini 如

    java做伺服器android做客戶實現資料傳輸

    許久未動筆,有個小專案開始動工。 需要用一臺windows電腦做伺服器,在android端與其進行資料交換,實現一些業務。 簡單起見,用java寫這個伺服器,以前沒做過,試試水。很簡單的程式碼,純粹找思路。 伺服器端程式碼: package com.test; impor

    如何在WebService接收一個XML檔案並解析客戶如何傳送這個XML檔案?急求簡單程式碼示例。。

    客戶端 xmlHttp = null; if (window.XMLHttpRequest) { // If IE7, Mozilla, Safari, and so on: Use native object. xmlHtt

    Netty資料傳輸-客戶queue-client

    【一個小程式設計師的成長日記】在公司接了一個任務,完成一個專案資料同步模組。要求是不能操作專案的資料庫。所以想到的方案是使用log4jdbc記錄資料來源的SQL語句或者儲存過程到日誌檔案。然後按行讀取日誌檔案中的資料,記錄讀取的點,以便下次繼續讀取。讀取的資料進入Big Queue佇列(一個大型、快速且持久的

    cocos creator專案實戰全套(客戶伺服器資料庫)視訊教程

    問題諮詢 為了避免由於網頁溝通的不及時所引起的誤會,特提供客服QQ:1927832684      普通學員交流群:572270243                  有問題及時反饋,避免發生不必要的誤會! 課程簡介課程特色:專案為主,一切跟著專案走,拒絕高大上,拒絕瞎比比,腳踏實地,實踐為主! 課程內容:

    由於這臺計算機沒有終端伺服器客戶訪問許可證遠端會話被中斷。請與伺服器管理員聯絡 解決

    今天用xp機器連線遠端的win2003伺服器是提示"由於這臺計算機沒有終端伺服器客戶端訪問許可證,遠端會話被中斷。請與伺服器管理員聯絡" 在網上找了一下,發現一下解決方案: 1.在伺服器上將終端伺服器授權模式從“每裝置”更改為“每使用者”。 2.在客戶端上,導航到下列登錄檔子

    遠端桌面連線 及"由於這臺計算機沒有終端伺服器客戶訪問許可證遠端會話被中斷"

    原因:終端伺服器中的終端伺服器授權模式可能設定為“每裝置”,而許可證伺服器可能僅有“每使用者 CAL”。如果是這種情況,那麼許可證伺服器將僅頒發臨時許可證,這是不能升級的。當臨時許可證還有幾天即將過期時,“事件 ID 26,源:應用程式彈出訊息”將顯示在客戶端上的應用程式事件日誌中。該事件訊息指出臨時許可證還