Netty搭建Socket伺服器(第一天學習)
為什麼要學習netty
當你寫了一段時間的客戶端以後你會發現除非你想寫opengl或者提別的複雜的圖形演算法,否則你不得不承認你只會寫一些邏輯的顯示,至於那些現在流行的,高併發,大資料,人工智慧就會越來越遠,於是我準備學習高併發的相關知識,順便也可以總結一下以前學習的c的linux網路程式設計的一些基礎知識。參考書(netty實戰)
第一天學習的程式碼
我這裡的程式碼是jdk1.8
使用工具Eclipse
使用的netty-all-4.0.56.Final 這個版本
主類Hello_Server
package demo1; import io.netty.bootstrap.ServerBootstrap;//伺服器執行緒 import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class Hello_Server { private static final int portNumber = 7878;//埠 public static void main(String[] args) throws InterruptedException{ // TODO Auto-generated method stub EventLoopGroup bossGroup = new NioEventLoopGroup();//主執行緒 EventLoopGroup workGroup = new NioEventLoopGroup();//工作執行緒 try { System.out.print("伺服器已經啟動"); ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup,workGroup);//裝入執行緒 b.channel(NioServerSocketChannel.class);//制定Nio傳輸 b.childHandler(new HelloServerInitializer());//新增到子channel的ChannelPipeline裡面 ChannelFuture f = b.bind(portNumber).sync();//繫結埠 f.channel().closeFuture().sync();//關閉 } finally { bossGroup.shutdownGracefully();//關閉執行緒 workGroup.shutdownGracefully(); } } }
對應的pipeline繫結事件類
HelloServerInitializer.java
package demo1; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.Delimiters; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; public class HelloServerInitializer extends ChannelInitializer<SocketChannel> { //初始化對的一些操作 @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline();//獲得連線 //解析方式以\n作為標記 pipeline.addLast("framer",new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); pipeline.addLast("decoder",new StringDecoder()); pipeline.addLast("encode",new StringEncoder()); //自己的邏輯 pipeline.addLast("handler",new HelloServerHandler()); } }
處理我自己邏輯的類
HelloServerHandler.java
package demo1; import java.net.InetAddress; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; public class HelloServerHandler extends SimpleChannelInboundHandler<String> { //收到資料 @Override protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception { //ChannelHandlerContext 返回事件的物件 // 收到訊息直接列印輸出 System.out.println(ctx.channel().remoteAddress() + " Say : " + msg); // 返回客戶端訊息 - 我已經接收到了你的訊息 ctx.writeAndFlush("Received your message !"); } /* * 如果連線錯誤事件 */ @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { // TODO Auto-generated method stub cause.printStackTrace(); ctx.close(); } /* * 覆蓋 channelActive 方法 在channel被啟用的時候觸發 (在建立連線的時候) * channelActive 和 channelInActive 在後面的內容中講述,這裡先不做詳細的描述 */ @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println("RamoteAddress : " + ctx.channel().remoteAddress() + " active !"); ctx.writeAndFlush("Welcome to " + InetAddress.getLocalHost().getHostName() + " service!\n"); super.channelActive(ctx); } }
使用dos命令telnet 127.0.0.1 7878來做連線測試如果成功如圖所示
這說明我的初級伺服器已經連線成功!當然還有不完善的地方比如不能傳送中文。
相關推薦
Netty搭建Socket伺服器(第一天學習)
為什麼要學習netty 當你寫了一段時間的客戶端以後你會發現除非你想寫opengl或者提別的複雜的圖形演算法,否則你不得不承認你只會寫一些邏輯的顯示,至於那些現在流行的,高併發,大資料,人工智慧就會越來越遠,於是我準備學習高併發的相關知識,順便也可以總結一下以前學習的c
搭建SVN伺服器(centos 7.3)
一、安裝svn # 安裝subversion yum install subversion # 檢視subversion的安裝路徑 rpm -ql subversion 二、建立svn版本庫 # 建立svn版本庫所在目錄 mkdir -p /data/svn/svn_repo
吳伯凡-自我迭代與自我迭代的第一步--》模式識別(第一天更新)
自我迭代 什麼是自我迭代 簡單的講自我迭代就是對自己的認知系統,進行持續系統的優化 那怎麼樣進行自我迭代呢? 自我迭代的第一步就是,要找準自己的定位,說的大白話一些,就是要認清自己是那塊料,古人不是常說人貴有自知之明嘛,說的就是這個意思 而比較好的教育方式,是因材施教,而這要求老師有能力去發現每個學
centos7搭建git伺服器(多使用者版)
建立倉庫並分享到組: git init --shared=group test 建立組: groupadd git 切換專案所屬組: chgrp -R git test 建立使用者1: useradd test1 -g git passwd test1 建立使用者2
centOS7 搭建LAMP伺服器(apache+php+MariaDB)
安裝httpd yum install httpd 配置ServerName vi /etc/httpd/conf/httpd.conf 將#ServerName www.example.com:80修改為ServerName localhost:80
2018年10月06號(第一天視訊)
** 第一天視訊總結 *學習linux終端命令 注意:命令大小寫要分清楚 1.cd為切換路徑 2.pwd為檢視當前目錄位置 3.clear為清空 4.絕對路徑是可以從home資料夾的python目錄直接跳轉到boot資料夾:當前目錄為home:cd /boot
Centos7搭建JavaWeb伺服器(Java+MySQL+Tomcat)
0、資原始檔 百度網盤連結: java+tomcatLinux安裝包: linux連線工具SmarTTY(比較好用,支援windows向虛擬機器上傳檔案): 1、Centos7環境 利用VMware Workstation,並新建安裝虛擬機器CentOS7
node 搭建簡單伺服器-(用於mock資料)
1.安裝express依賴(是一個基於 Node.js 平臺,快速、開放、極簡的 Web 開發框架) npm install express --save 2.看程式碼就好了 node serves.js就能開啟服務 //安裝express依賴 並用變數
Centos7安裝搭建FTP伺服器(最簡便方法)
簡介: vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。 vsftpd 是一個 UNIX 類作業系統上執行的伺服器的名字,它可以執行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放原始碼的
FastDFS+Nginx搭建圖片伺服器(親測OK)
前言 操作環境:CentOS7 X64,以下操作都是單機環境。 我把所有的安裝包下載到/softpackage/下,解壓到當前目錄。 先做一件事,修改hosts,將檔案伺服器的ip與域名對映(單機TrackerServer環境),因為後面很多配置裡面都需要去配置伺服器地址,ip變
搭建git伺服器(在windows server)
專案程式碼的分支管理一直是一個很頭疼的問題,因為使用的是svn。於是開始嘗試使用git。目前公共的git伺服器使用量比較廣泛就是github和碼雲。github私有庫是收費的,碼雲雖然不收費,但是使用者數量有限制。想著還是自己搭建一個git伺服器吧。搭建的環境是在window
搭建Git伺服器(Ubuntu虛擬機器)和windows客戶端
一直以來用Git都是用的別人的伺服器, 比如oschina 和github, 今天因為工作需要在自己的ubuntu上搭建了自己Git 伺服器, 以下記錄一些步驟和碰到的問題
搭建 Git 伺服器(基於 CentOS 7)
對於規模比較小的團隊,可以直接搭建 Git 伺服器,逐個收集研發同學的證書配置進來即可。如果團隊規模比較大,可以直接採用 GitLab、Drone 等現成的帶有許可權管理的 Git 服務。 伺服器端操作 安裝 Git 對於 CentOS,可以直
spring cloud系列一 搭建配置伺服器(分散式配置管理)configserver
分散式配置管理應該是分散式系統和微服務應用的第一步。想象一下如果你有幾十個服務或應用需要配置,而且每個服務還分為開發、測試、生產等不同維度的配置,那工作量是相當大的,而且還容易出錯。如果能把各個應用的
Centos7搭建DNS伺服器(僅正解)
本文介紹一下DNS伺服器的搭建 用的是3臺伺服器: linux主機:192.168.1.200/24作為DNS伺服器 server主機:192.168.1.201/24作為需要被解析的主機 linux主機:192.168.1.202/24作為被解析的主機
python3第一天學習(數據類型)
絕對值 pre return col pytho tar .html art 整數 參考blog地址:http://www.cnblogs.com/wupeiqi/articles/5444685.html,然後根據上面知識點練習並總結。 一.數字(int) 1.數字
C語言學習(第一天)
項目 align getchar include 下載安裝 類型 reg 程序 nbsp 1、工具和資源 Visual Studio 2017社區免費版,使用Visual Studio Installer下載安裝,安裝完成點擊修改,安裝C++桌面模塊。 根據C Pr
Golang學習(第一天 IDE)--goland快捷鍵(對應的VS類似快捷鍵)
Goland常用快捷鍵 檔案相關快捷鍵: CTRL+E,開啟最近瀏覽過的檔案。 CTRL+SHIFT+E,開啟最近更改的檔案。 CTRL+N,可以快速開啟struct結構體。 CTRL+SHIFT+N,可以快速開啟檔案。 程式碼格式化: CTRL+ALT+T,可以把程式碼包在一個塊內,例如i
tensorflow學習筆記(第一天)-深度卷積神經網路
一、在這裡首先需要了解一些概念性的東西,當然我是才接觸,還不太熟悉: 1.numpy NumPy系統是Python的一種開源的數值計算擴充套件。這種工具可用來儲存和處理大型矩陣,比Python自身的巢狀列表(nested l
tensorflow學習筆記(第一天)-MNIST機器學習入門
MNIST機器學習入門 這個是關於tensorflow的中文文件: http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html MNIST是一個入門級的