利用Netty進行客戶端和服務端互動的入門示例
1.首先,建立服務端
public class DiscardServer { private int port; public DiscardServer(int port) { super(); this.port = port; } public void run() { //配置Server ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool() )); //設定pipeFactory bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = Channels.pipeline(new DiscardServerHandler()); return pipeline; } }); //繫結server端埠 bootstrap.bind(new InetSocketAddress(port)); } public static void main(String[] args) { new DiscardServer(8080).run(); } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
2、建立服務端事件處理的站點Handler,裡面包含回撥方法用於處理與客戶端互動時的操作。
class DiscardServerHandler extends SimpleChannelHandler { @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { System.out.println("--------服務端-------"); String str = "Hello world, I'm server"; ChannelBuffer buffer = ChannelBuffers.buffer(str.length()); buffer.writeBytes(str.getBytes()); e.getChannel().write(buffer); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { ChannelBuffer buffer = (ChannelBuffer) e.getMessage(); System.out.println("服務端接收到訊息:" + buffer.toString(Charset.defaultCharset())); } }
3、建立客戶端
public class TimeClient { private String host; private int port; public TimeClient(String host, int port) { super(); this.host = host; this.port = port; } public void run() { ClientBootstrap bootstrap = new ClientBootstrap( new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool() ) ); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { //ChannelPipeline 管道、傳輸途徑 @Override public ChannelPipeline getPipeline() throws Exception { // ChannelPipeline pipeline = Channels.pipeline(); // pipeline.addLast("encode", new StringEncoder()); // pipeline.addLast("decode", new StringDecoder()); // pipeline.addLast("handler", new TimeClientHandler()); return Channels.pipeline(new TimeClientHandler()); } }); // bootstrap.setOption("tcpNoDelay", true); // bootstrap.setOption("keepAlive", true); // Start the connection attempt. ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)); // Wait until the connection is closed or the connection attempt fails. future.getChannel().getCloseFuture().awaitUninterruptibly(); // Shut down thread pools to exit. bootstrap.releaseExternalResources(); } public static void main(String[] args) { new TimeClient("127.0.0.1", 8080).run(); } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
4、建立客戶端的Handler
class TimeClientHandler extends SimpleChannelHandler {
//這個屬於事件相關的處理
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
System.out.println("-----------客戶端---------------");
String msg = "Hello world, I'm client";
ChannelBuffer buffer = ChannelBuffers.buffer(msg.length());
buffer.writeBytes(msg.getBytes());
e.getChannel().write(buffer);
}
@Override
public void messageReceived(
ChannelHandlerContext ctx, MessageEvent e) {
// Send back the received message to the remote peer.
ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage();
String info = acceptBuff.toString(Charset.defaultCharset());
System.out.println("客戶端接收到訊息:" + info);
e.getChannel().close();
}
}
5、先啟動server端,再啟動client端。可以分別在服務端和客戶端的控制檯看到如下訊息:
server console:
--------服務端-------
服務端接收到訊息:Hello world, I'm client
client console:
-----------客戶端---------------
客戶端接收到訊息:Hello world, I'm server
6、注意在handler中,傳遞字串必須以ChannelBuffer為載體,不能直接用String傳遞。
當客戶端和服務端連線上後,先回調的是channelConnected方法;之後才是messageReceived方法。
至此,就完成了Netty客戶端與服務端的簡單互動!
相關推薦
利用Netty進行客戶端和服務端互動的入門示例
Netty是基於事件驅動的、非同步的網路應用程式框架和工具,用以快速開發高效能、高可靠性的網路伺服器和客戶端程式。是一種NIO框架,下面從最簡單的Hello World示例開始,演示服務端和客戶端互動進行Netty互動。 1.首先,建立服務端 public class Dis
Netty實現客戶端和服務端通信簡單例子
啟動服務 ali tty 過程 等等 服務器初始化 讀寫操作 extends ask Netty是建立在NIO基礎之上,Netty在NIO之上又提供了更高層次的抽象。 在Netty裏面,Accept連接可以使用單獨的線程池去處理,讀寫操作又是另外的線程池來處理。 Accep
Netty學習(3): 客戶端和服務端的例子
服務端: package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import
cocos2dx3.x利用sokcet建立客戶端和服務端 (二)
服務端: 初始化服務端 向指定客戶端傳送訊息 void sendMessage(HSocket socket, constchar* data, int count); 向所有客戶端傳送訊息 void sendMessage(const char* data, int c
Netty實現客戶端和服務端的通訊
Netty是Apache團隊的又一個優秀的Socket框架,它和mina是一個團隊開發的,所以很多思想是相同的,接下來,我們就來實現客戶端和服務端的雙向通訊。 首先,我們定義訊息型別:/** * 訊息型別 * @author 李熠 * *
cocos2dx3.x利用sokcet建立客戶端和服務端(一)
Socke基類: 包括Socket的初始化,主要是windows上,在android上就不需要了 如果平臺為windows,則需要初始化 SocketBase::SocketBase() { _bInitSuccess = false; #if (CC_TARGET_PLA
客戶端和服務端如何使用Token和Session
cnblogs blank style ssi exception font 統一 判斷 用戶 一、我們先解釋一下他的含義: 1、Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作
基於thrift的java和python分別作為客戶端和服務端的調用實現
Coding except arr pes com ssa utf-8 encoding 中文亂碼 前面已經實現了純java的thrift的實現。 現在實現實現一下python作為客戶端和服務端的thrift的調用 1.python作為客戶端,java作為服務端 java服
netty4----netty5的客戶端和服務端
服務端 處理 sock 一個 servers 線程不安全 inbound nio owa 服務端: package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channe
客戶端和服務端根路徑“/”的區別
name 根路徑 ber AC jsp 後端 ffffff http 最簡 文章來源 : https://blog.csdn.net/zwt520123/article/details/76794446 JSP 變為 HTML 的問題 由上面可以看到,整個 Web
Python學習筆記1:簡單實現ssh客戶端和服務端
bsp dev bre 客戶端 break 基於 bin listen 客戶 實現基於python 3.6。 server端: 1 __author__ = "PyDev2018" 2 3 import socket,os 4 server = socket.s
linux網絡編程之用socket實現簡單客戶端和服務端的通信(基於UDP)
服務端 msg ets lin fgets err n) stderr tcp 單客戶端和服務端的通信(基於UDP) 代碼 服務端代碼socket3.c #include<sys/types.h> #include<sys/socket.h>
Linux下面安裝ftp客戶端和服務端vsftp
在Linux下面使用ftp工具,必須有客戶端和服務端。 1、使用環境客戶端為Redhat Linux6.4系統,需要到iso檔案中找到對應的Packages包,版本一定要和os版本保持一致,Linux6.4系統的ftp版本號為ftp-0.17-53.el6.x86_64.rpm ,上傳到伺服
zookeeper客戶端和服務端互動分析
原文連結 ZkClient 在使用ZooKeeper的Java客戶端時,經常需要處理幾個問題:重複註冊watcher、session失效重連、異常處理。
python UDP客戶端和服務端對話
‘’’ UDP客戶端 ‘’’ import socket #1,建立socker物件dgram SOCK_DGRAM—UDP s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #傳送資料 while True: a=input(“請輸入你
Redis---客戶端和服務端
Redis---客戶端和服務端 文章轉載自:http://redisbook.readthedocs.io/en/latest/internal/redis.html http://www.spongeliu.com/category/linux https://blo
zookeeper之客戶端和服務端的區別
客戶端是叢集外的訪問,服務端才是叢集上的提供服務的。 使用bin/zkServer.sh start開啟的zookeeper上的一個服務端,而使用bin/zkCli.sh是將客戶端連到服務端上。 客戶端可以通過服務端建立znode,刪除znode,寫znode,讀znod
基於TCP的客戶端和服務端資料傳輸
功能描述: 從客戶端向服務端傳送字串,服務端接收之後,把字串轉成大寫,並返回給客戶端, 客戶端程式碼 import java.io.IOException; import java.io.InputStream; import java.io.OutputStrea
python實現一個簡單的thirft客戶端和服務端
建立thrift檔案 service Hello { string get() } 使用thrift 建立服務需要的元件 thrift --gen py hello.thrif
Android客戶端使用OkGo上傳檔案或者圖片,客戶端和服務端程式碼分享
(一)上傳單個檔案或者圖片: 客戶端程式碼: /** * 儲存資料到伺服器 */ private void saveToInternet() { //上傳單個檔案 String url = Constants.USER_NET_ICON; Fi