1. 程式人生 > >netty的tcp服務端

netty的tcp服務端

jar包下載,http://pan.baidu.com/s/1hr2VBzY
import org.apache.log4j.Logger;


import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;


public class NettyServerBootstrap {


private static Logger logger = Logger.getLogger(NettyServerBootstrap.class);


private int port;


public NettyServerBootstrap(int port) {
this.port = port;
bind();
}


private void bind() {


EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();


try {


ServerBootstrap bootstrap = new ServerBootstrap();


bootstrap.group(boss, worker);
bootstrap.channel(NioServerSocketChannel.class);
bootstrap.option(ChannelOption.SO_BACKLOG, 1024); //連線數
bootstrap.option(ChannelOption.TCP_NODELAY, true);  //不延遲,訊息立即傳送
bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true); //長連線
bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel)
throws Exception {
ChannelPipeline p = socketChannel.pipeline();
p.addLast(new NettyServerHandler());
}
});
ChannelFuture f = bootstrap.bind(port).sync();
if (f.isSuccess()) {
logger.debug("啟動Netty服務成功,埠號:" + this.port);
System.out.println("啟動Netty服務成功,埠號:" + this.port);
}
// 關閉連線
f.channel().closeFuture().sync();


} catch (Exception e) {
logger.error("啟動Netty服務異常,異常資訊:" + e.getMessage());
System.out.println("啟動Netty服務異常,異常資訊:" + e.getMessage());
e.printStackTrace();
} finally {
boss.shutdownGracefully();
worker.shutdownGracefully();
}
}


public static void main(String[] args) throws InterruptedException {

NettyServerBootstrap server= new NettyServerBootstrap(9999);


}


}

//具體實現



import java.io.UnsupportedEncodingException;


import com.sun.xml.internal.fastinfoset.stax.events.Util;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;


public class NettyServerHandler extends ChannelHandlerAdapter {


@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {

ByteBuf buf = (ByteBuf) msg;

String recieved = getMessage(buf);
System.out.println("伺服器接收到訊息:" + recieved);
int i=0;
if(!Util.isEmptyString(recieved)&&i<2){
try {
ctx.writeAndFlush(getSendByteBuf("APPLE"));
i++;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/*try {
ctx.writeAndFlush(getSendByteBuf("APPLE"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
}


/*
* 從ByteBuf中獲取資訊 使用UTF-8編碼返回
*/
private String getMessage(ByteBuf buf) {


byte[] con = new byte[buf.readableBytes()];
buf.readBytes(con);
try {
return new String(con,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}

private ByteBuf getSendByteBuf(String message)
throws UnsupportedEncodingException {


byte[] req = message.getBytes("UTF-8");
ByteBuf pingMessage = Unpooled.buffer();
pingMessage.writeBytes(req);


return pingMessage;
}
}

netty先啟動服務端,然後在啟動客戶端進行資料互動,這裡囉嗦一下

相關推薦

Java通過 Socket 實現 TCP服務(一個實例)

trac write 建立 回復 狀態 else 應用程序 字符 system 1 Java Socket簡介   所謂socket 通常也稱作”套接字“,用於描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過”套接字”向網絡發出請求或者應答網絡請求。Socket和S

安卓使用Socket發送中文,C語言服務接收亂碼問題解決方式

article nbsp ons size ret con pre n+1 utf8 今天用安卓通過Socket發送數據到電腦上使用C語言寫的服務端,發送英文沒有問題,可當把數據改變成中文時,服務端接收到的數據確是亂碼。 突然想到。VS的預處理使用的

Java網絡編程【Socket服務和客戶

rgs .net aio highlight 如果 org author oid try Socket 編程大家都不陌生,Java 學習中必學的部分,也是 Java網絡編程核心內容之一。Java 網絡編程又包括 TCP、UDP,URL 等模塊。TCP 對應 Socket

Token:服務身份驗證的流行方案

rst 服務 方案 app 過程 組件圖 wav hit margin 01- 身份認證 服務端提供資源給客戶端,但是某些資源是有條件的。所以服務端要能夠識別請求者的身份,然後再判斷所請求的資源是否可以給請求者。 token是一種身份驗證的機制,初始時用戶提交賬號數據

基於UDT connect連接通信以及文件傳輸--服務

title set max 能夠 def htons 基於 bre 源代碼下載 網上與UDT相關的資料不多,與UDT相關的源碼例子更少。最近在接觸UDT,也是因為缺少相關的資料,導致學習起來甚感痛苦。下面將我自己這兩天弄出來的代碼貼出來,希望對在尋找相關資料的童鞋有一定的幫

SSR服務安裝教程

安裝 soc hub configure use 服務端 安裝教程 配置教程 多用戶 SSR服務端安裝教程https://github.com/breakwa11/shadowsocks-rss/wiki/Server-Setup SS服務端安裝教程https://gith

JPush簡單Java服務案例實現

服務端 開發者 comm platform die spa message else 獲取數據 一、激光推送準備工作 1、註冊極光推送開發者賬號,創建應用: 2、完成推送設置,填寫應用名提交生成安裝包: 3、掃碼安裝簡單的測試apk,查看應用信息會有AppKey和Mas

服務Json數據+js表單數據提交的 表單交互插件(base-form.js)

json 舉例 () 編輯 表單 服務器 erro 問題 java 我們在做表單的查看、編輯裏涉及兩個點: 點1,提交Form表單到服務器,保存到數據庫 點2,頁面顯示Form表單裏的所有字段 如果表單的字段很多,這兩個點會有兩個問題: 1,提交Form時,如何少量代碼

客戶服務如何使用Token和Session

cnblogs blank style ssi exception font 統一 判斷 用戶 一、我們先解釋一下他的含義: 1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作

【HLSDK系列】服務 UpdateClientData 函數

del 完全 dll viewmodel 代碼 lag ase mod water 首先說明下,這個函數是寫在 mp.dll 裏的。 服務器會給每個客戶端發送一些數據,其中兩大數據種類就是 clientdata_t 和 entity_state_t 這裏要說的是 clien

【HLSDK系列】服務 AddToFullPack 函數

客戶端 global 客戶 const start max pre 參數 glob 服務端會給客戶端發送一些數據,其中兩大種類數據是 clientdata_t 和 entity_state_t 這裏我們說說 entity_state_t 這個結構體。 你在丟在地上的槍、C4

【HLSDK系列】服務實體 edict_t 和 控制類

武器 .cpp 成員 常用 blog 生成 指針 但是 dll 我們來了解一下引擎是怎麽管理實體的吧!我們這裏就說說服務端的實體(edict_t) 服務端用 edict_t 這個結構體來保存一個實體,可以說一個 edict_t 就是一個 服務端實體,下文簡稱實體。 我們在

【2017-05-21】WebForm跨頁面傳值取值、C#服務跳轉頁面、 Button的OnClientClick屬性、Js中getAttribute和超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

Python socket編程客戶服務通信

eve sock 系統 con conn 綁定 idt 註意 服務 [本文出自天外歸雲的博客園] 目標:實現客戶端與服務端的socket通信,消息傳輸。 客戶端 客戶端代碼: from socket import socket,AF_INET,SOCK_STRE

阿裏雲ESC搭建SVN服務

臨時 阿裏 權限控制 onf config 配置參數 技術 mage stop   CentOS7)下yum命令快速安裝svn服務端,學習在思考中獨孤中度過,在孤獨中進取! 01、SVN服務的安裝(subversion) 02、ESC安全組策略 1、在線安裝svn服務

多人即時戰鬥遊戲服務系列[2]--90坦克Online遊戲對象介紹以及渲染機制

d+ ica 部分 avi 產生 4.4 1.8 timer lock 先上類圖,略大,點擊此處放大: 1.先說下方接口 1.1 場景物品接口 ISceneObject : OpLog.IOpItem, IStackPoolObject 全部場景對象的基本

Server-Side Rendering(服務渲染)的優點與缺點

spa 性能 ide 渲染 額外 優點 一定的 size 壓力 優點 1. SEO 客戶端渲染,頁面中只有初始的幾個html容器,js生成內容填充到容器中,爬蟲只能識別到初始的html容器,js生成的內容一般不會被識別,而服務端渲染直接給出html,爬蟲可以識別到所有內容

OAuth2.0學習(3-1)服務實現

other cti info ase service packages artifacts ace ews 開源 http://oltu.apache.org/ 其他 http://www.oschina.net/project/tag/307/oauth?lang=19&

django做服務 window.name javascript跨域實現原理及實例

字符串 tex 並且 ble blog char src 兩個 splay 項目地址:https://github.com/blff122620/jsLibary/tree/master/crossDomainDemo 原理如下:window.name 傳輸技術,原本是 T

服務開發所需要的知識

layer eat 推薦 基本上 strong 層次 經驗 tor hang 網上流傳一篇文章叫<Linux C++服務器端開發技術>,也就是做Linux C++開發需要哪些技術,內容如下 1、基本知識:掌握C/C++語法,熟悉STL標準庫、ACE庫、Boost