国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - 簡單的Ruby中的Socket編程教程

簡單的Ruby中的Socket編程教程

2020-04-24 10:51goldensun Ruby

這篇文章主要介紹了簡單的Ruby中的Socket編程教程,是為Ruby on Rails學習過程當中的基礎知識,需要的朋友可以參考下

Ruby提供了兩個級別訪問網(wǎng)絡的服務,在底層你可以訪問操作系統(tǒng),它可以讓你實現(xiàn)客戶端和服務器為面向連接和無連接協(xié)議的基本套接字支持。

Ruby 統(tǒng)一支持應用程的網(wǎng)絡協(xié)議,如FTP、HTTP等。

不管是高層的還是底層的。ruby提供了一些基本類,讓你可以使用TCP,UDP,SOCKS等很多協(xié)議交互,而不必拘泥在網(wǎng)絡層。這些類也提供了輔助類,讓你可以輕松的對服務器進行讀寫。

接下來就讓我們來學習如何進行 Ruby Socket 編程
什么是 Sockets

應用層通過傳輸層進行數(shù)據(jù)通信時,TCP和UDP會遇到同時為多個應用程序進程提供并發(fā)服務的問題。多個TCP連接或多個應用程序進程可能需要 通過同一個TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應用程序進程和連接,許多計算機操作系統(tǒng)為應用程序與TCP/IP協(xié)議交互提供了稱為套接字 (Socket)的接口,區(qū)分不同應用程序進程間的網(wǎng)絡通信和連接。

生成套接字,主要有3個參數(shù):通信的目的IP地址、使用的傳輸 層協(xié)議(TCP或UDP)和使用的端口號。Socket原意是"插座"。通過將這3個參數(shù)結(jié)合起來,與一個"插座"Socket綁定,應用層就可以和傳輸 層通過套接字接口,區(qū)分來自不同應用程序進程或網(wǎng)絡連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務。

Sockets 詞匯解析:

簡單的Ruby中的Socket編程教程

簡單的客戶端

以下我們通過給定的主機和端口編寫了一個簡單的客戶端實例,Ruby TCPSocket 類提供了 open 方法來打開一個 socke。

TCPSocket.open(hosname, port ) 打開一個 TCP 連接。

一旦你打開一個 Socket 連接,你可以像 IO 對象一樣讀取它,完成后,你需要像關(guān)閉文件一樣關(guān)閉該連接。

以下實例演示了如何連接到一個指定的主機,并從 socket 中讀取數(shù)據(jù),最后關(guān)閉socket:

?
1
2
3
4
5
6
7
8
9
10
11
require 'socket'   # Sockets 是標準庫
 
hostname = 'localhost'
port = 2000
 
s = TCPSocket.open(hostname, port)
 
while line = s.gets  # 從 socket 中讀取每行數(shù)據(jù)
 puts line.chop   # 打印到終端
end
s.close        # 關(guān)閉 socket

簡單的服務

Ruby 中可以使用 TCPServer 類來寫個簡單的服務。TCPServer 對象是 TCPSocket 的工廠對象。

現(xiàn)在我們使用 TCPServer.open(hostname, port) 來創(chuàng)建一個 TCPServer 對象。

接下來調(diào)用 TCPServer 的 accept 方法,該方法會等到一個客戶端連接到指定的端口,然后返回一個的TCPSocket對象,表示連接到該客戶端。

?
1
2
3
4
5
6
7
8
9
require 'socket'        # 獲取socket標準庫
 
server = TCPServer.open(2000) # Socket 監(jiān)聽端口為 2000
loop {             # 永久運行服務
 client = server.accept    # 等待客戶端連接
 client.puts(Time.now.ctime) # 發(fā)送時間到客戶端
 client.puts "Closing the connection. Bye!"
 client.close         # 關(guān)閉客戶端連接
}

現(xiàn)在,在服務器上運行以上代碼,查看效果。
多客戶端TCP服務

互聯(lián)網(wǎng)上,大多服務都有大量的客戶端連接。

Ruby的Thread類可以很容易地創(chuàng)建多線程服務,一個線程執(zhí)行客戶端的連接,而主線程在等待更多的連接。

?
1
2
3
4
5
6
7
8
9
10
require 'socket'        # 獲取socket標準庫
 
server = TCPServer.open(2000# Socket 監(jiān)聽端口為 2000
loop {             # 永久運行服務
 Thread.start(server.accept) do |client|
  client.puts(Time.now.ctime) # 發(fā)送時間到客戶端
  client.puts "Closing the connection. Bye!"
  client.close        # 關(guān)閉客戶端連接
 end
}

在這個例子中,socket永久運行,而當server.accept接收到客戶端的連接時,一個新的線程被創(chuàng)建并立即開始處理請求。而主程序立即循環(huán)回,并等待新的連接。
微小的Web瀏覽器

我們可以使用socket庫來實現(xiàn)任何的 Internet 協(xié)議。以下代碼展示了如何獲取網(wǎng)頁的內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require 'socket'
 
host = 'www.ziqiangxuetang.com'   # web服務器
port = 80              # 默認 HTTP 端口
path = "/index.htm"         # 想要獲取的文件地址
 
# 這是個 HTTP 請求
request = "GET #{path} HTTP/1.0 "
 
socket = TCPSocket.open(host,port) # 連接服務器
socket.print(request)        # 發(fā)送請求
response = socket.read       # 讀取完整的響應
# Split response at first blank line into headers and body
headers,body = response.split(" ", 2)
print body             # 輸出結(jié)果

要實現(xiàn)一個類似 web 的客戶端,你可以使用為 HTTP 預先構(gòu)建的庫如Net::HTTP。

以下代碼與先前代碼是等效的:

?
1
2
3
4
5
6
7
8
9
10
11
require 'net/http'         # 我們需要的庫
host = 'www.ziqiangxuetang.com'      # web 服務器
path = '/index.htm'         # 我們想要的文件
 
http = Net::HTTP.new(host)     # 創(chuàng)建連接
headers, body = http.get(path)   # 請求文件
if headers.code == "200"      # 檢測狀態(tài)碼
 print body           
else               
 puts "#{headers.code} #{headers.message}"
end

 

延伸 · 閱讀

精彩推薦
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來總結(jié)一下 ...

    可樂加糖4762020-04-12
  • RubyRuby簡潔學習筆記(一):字符串、數(shù)字、類和對象

    Ruby簡潔學習筆記(一):字符串、數(shù)字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數(shù)字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby環(huán)境下安裝使用bundler來管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數(shù)據(jù)是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態(tài)語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 中文字幕一区二区三区四区不卡 | 亚洲男性天堂 | 成人不卡视频 | 国产高清自拍视频 | 亚洲一区二区免费看 | 久久久国产精品久久久 | 日韩超级大片免费看国产国产播放器 | 国产精品视频在线播放 | 亚洲一区欧美 | av福利在线观看 | 国产在线欧美 | 国产精品国产a级 | 日韩在线电影 | 欧美日韩精品在线观看 | 色婷婷基地 | 日本丶国产丶欧美色综合 | 韩国三级午夜理伦三级三 | 激情综合五月 | 最新国产在线视频 | 国产精品99久久久久久宅男 | 亚洲电影在线观看 | 伊人99| 影音先锋亚洲资源 | 欧美人成在线视频 | 欧美影 | 高清av电影 | 午夜精品久久久久久久久 | 久久久久久一级片 | 国产传媒一区 | 青青久视频 | 久久国产午夜 | 五月天婷婷激情 | 久久天天| 精品国产精品三级精品av网址 | 色天天综合 | 在线观看一区三区 | 91在线观看免费观看 | 午夜国产在线 | 亚洲欧美一级久久精品 | 国产精品一区三区 | 久久精品|