1. 程式人生 > >Netty學習5-Netty3.X服務端與客戶端

Netty學習5-Netty3.X服務端與客戶端

import java.net.InetSocketAddress;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.jboss.netty.handler.codec.string.StringDecoder;
import org.jboss.netty.handler.codec.string.StringEncoder;

/**
 * netty客戶端入門
 */
public class Client {

	@SuppressWarnings("resource")
	public static void main(String[] args) {
		// 服務類
		ClientBootstrap bootstrap = new ClientBootstrap();
		// 執行緒池
		ExecutorService boss = Executors.newCachedThreadPool();
		ExecutorService worker = Executors.newCachedThreadPool();
		// socket工廠
		bootstrap.setFactory(new NioClientSocketChannelFactory(boss, worker));
		// 管道工廠
		bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
			@Override
			public ChannelPipeline getPipeline() throws Exception {
				ChannelPipeline pipeline = Channels.pipeline();
				pipeline.addLast("decoder", new StringDecoder());
				pipeline.addLast("encoder", new StringEncoder());
				pipeline.addLast("hiHandler", new HiHandler());
				return pipeline;
			}
		});

		// 連線服務端
		ChannelFuture connect = bootstrap.connect(new InetSocketAddress(
				"127.0.0.1", 10101));
		Channel channel = connect.getChannel();
		System.out.println("client start");

		Scanner scanner = new Scanner(System.in);
		while (true) {
			System.out.println("請輸入");
			channel.write(scanner.next());
		}
	}

}


import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

/**
 * 訊息接受處理類
 */
public class HiHandler extends SimpleChannelHandler {

	// 接收訊息
	@Override
	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
			throws Exception {
		// 接收訊息
		String s = (String) e.getMessage();
		System.out.println(s);
		super.messageReceived(ctx, e);
	}

	// 捕獲異常
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
			throws Exception {
		System.out.println("exceptionCaught");
		super.exceptionCaught(ctx, e);
	}

	// 新連線
	@Override
	public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
			throws Exception {
		System.out.println("channelConnected");
		super.channelConnected(ctx, e);
	}

	// 必須【連線已經建立】,關閉通道的時候才會觸發
	@Override
	public void channelDisconnected(ChannelHandlerContext ctx,
			ChannelStateEvent e) throws Exception {
		System.out.println("channelDisconnected");
		super.channelDisconnected(ctx, e);
	}

	// channel關閉的時候觸發(比如服務端沒有啟動,客戶端發起連線的話,就會報這個錯)
	@Override
	public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
			throws Exception {
		System.out.println("channelClosed");
		super.channelClosed(ctx, e);
	}
}

相關推薦

Netty學習5-Netty3.X服務客戶

import java.net.InetSocketAddress; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org

基於Netty的一個WeoSocket通信服務客戶代碼(非JS代碼)

soc AS hub 應用服務 str ram 當前 AR 如果 基於Netty的一個WeoSocket通信服務器與客戶端代碼(非JS代碼) 咳咳,在這裏呢,小軒就不多說什麽是WebSocket的,還有呢,小軒為什麽不給出JS-Client代碼?網上太多代碼可以用了。小軒這

新手學習-Tcp的服務客戶的登入註冊系統

客戶端 最近臨近考試 還有好多科目需要預習 這個只能等到考試後再改一下了 現在這個程式問題很多 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.I

Netty編寫第一個服務客戶應用程式

服務端        所有的 Netty 伺服器都需要以下兩部分        至少有一個 ChannelHandler:該遵紀安實現了伺服器對客戶端接受的資料的處理邏輯,即業務邏輯        引導(ServerBootStrap):這是配置伺服器的啟動程式碼。它必須繫結

Mina學習(1):mina實現簡單服務客戶

mina是一個基於javaNio網路通訊應用框架,使用mina可以輕鬆的搭建伺服器,接下來將使用mina搭建一個小型的服務端 原始碼–MinaServer.java package serv

oracle服務客戶字符集不同導致中文亂碼解決方案

use 修改環境變量 描述 image nls_lang oracle服務 環境 分析 導致 1.問題描述 用pl/sql登錄時,會提示“數據庫字符集(ZHS16GBK)和客戶端字符集(2%)是不同的,字符集轉化可能會造成不可預期的後果”,具體問題是中文亂碼,如下圖 2.

C# Socket簡單例子(服務客戶通信)

項目 回車 pop ace log () client protocol comm 這個例子只是簡單實現了如何使用 Socket 類實現面向連接的通信。 註意:此例子的目的只是為了說明用套接字寫程序的大概思路,而不是實際項目中的使用程序。在這個例子中,實際上還有很多問題

TCP網絡程序實例——服務客戶交互

href tcpclient 端口號 信息 try 本機ip 發送數據 定義 .cn ◆ 服務器端 創建服務器端項目Server,在Main方法中創建TCP連接對象;然後監聽客戶端接入,並讀取接入的客戶端IP地址和傳入的消息;最後向接入的客戶端發送一條信息。代碼如下:

nagios 服務客戶監控安裝詳細配置,各配置文件詳解

this sql 引入 apache2 cpu load fine 宕機 pri require nagios 安裝與部署—————— 1、安裝前準備(1)創建nagios用戶和用戶組 [root@localhost ~]#groupadd nagios

NFS文件系統、服務客戶安裝、exportfs命令

NFS exportfs命令 NFS服務端安裝 NFS客戶端安裝 NFS介紹 NFS是Network File system的縮寫,也就是網絡文件系統;基於RPC協議進行傳輸; 服務端安裝 yum install -y nfs-utils rpcbind //安裝rpcbind包

html原理簡介、第一個網頁服務客戶

直接 ack 字符 time() true nec utf-8 RM 成了 #coding=utf-8 """ HTML: 20個標簽 一套瀏覽器認識的規則 學習規則。開發後臺程序:寫html文件 本地測試:找到文件直接雙擊打

使用Python的socket模塊搭建tcp服務客戶

有客 cep 服務器 send msg AC 鏈接 upper 可能 # __author__ = ‘ZSnail‘ # socket就是一個網絡通訊協議 # 服務器端 import socket server = socket.socket() server.b

ROS之服務客戶簡單程序遇到的錯誤

執行 AI gist 命令 鏈接 ret 教程 format fail 在按ROS入門教程(點擊打開鏈接)行進過程中遇到的錯誤 1、exec_depend與run_depend一樣 在按ROS入門教程(點擊打開鏈接)行進過程中到了執行 rosmsg show beg

java 界面編程用socket實現服務客戶的循環通信。

accept star return IE while fde trac AS inf 服務端: package 實驗五聊天; import java.awt.BorderLayout; import java.awt.EventQueue; import

Python 絕技 —— UDP 服務客戶

建模 又一 https lib python3 -a 數據 Coding doc i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 絕技 —— TCP 服務器與客戶端」中,介紹了傳輸層的核心協議 TCP ,並運用 Python 腳本的 socket

Untiy中用C#實現TCP通訊(Socket通訊)服務客戶皆可

簡而言之,TCP通訊原理大家可以從各種網路文獻上找到,這裡不做贅述。 只提出C#實現TCP通訊的一般方法和常用程式碼工具供第一次接觸TCP通訊的玩家參考,老玩家繞道。。。 為了方便大家理解我的程式碼,會適當提及通訊遠離。 1、建立服務端,TCP連線的基本: using U

為什麽從服務客戶不能接收消息NetMQ框架?

toc main net rec 使用 ssa oid frame 接收消息 最近,我使用NetMQ發送或接收服務器和客戶端之間的消息。 服務器密碼: void Main() { CreatePullAndPushSocket(); Task.Factory.Sta

MongoDB服務客戶下載、安裝和配置教程

MongoDB版本 3.6.3 MongoDB社群版 1.0  robomongo 下載 官網下載請點選這裡,百度雲下載請點選這裡,提取碼:6av6 安裝 MongoDB的安裝非常簡單,除了安裝路徑可以自己選擇之外,其它的步驟一直點下

java.TCP通訊(實現服務客戶簡單的聊天)

要求: 編寫兩個java application應用程式,完成以下功能: 一個程式為服務端,建立TCP服務端套接字。 l另外一個程式為客戶端,建立TCP客戶端套接字。 這兩個程式可以互聯,完成一個基於TCP/IP網路的文字聊天程式。 java原始碼如下: 1)基

WebService服務客戶得簡單應用,效能測試

用途: 比如需要從其他系統獲取資訊,但是不能暴露自己得實現方式的時候。 比較常用得有: 1.HttpClient 2.WebService (推薦使用WebService) 一.簡單介紹 服務端:  暴露出一個URL地址即可,列入     可以發現訪問進去就是一