日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nc 模拟服务器_Go实战——实现一个并发时钟服务器

發(fā)布時(shí)間:2025/4/5 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nc 模拟服务器_Go实战——实现一个并发时钟服务器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

生命不止,繼續(xù) go go go !!!

golang就是為高并發(fā)而生的,為我們提供了goroutines和channel。雖然前面博客的代碼片段中也有用到這兩個(gè)關(guān)鍵字,但是一直沒有組織好語言,也沒有能力把goroutines和channel寫好,那么估計(jì)我們先用,然后再看看的理解。

goroutines
A goroutine is a lightweight thread managed by the Go runtime.
幾個(gè)關(guān)鍵字:輕量級,線程。

package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) }}func main() { go say("world") say("hello")}

區(qū)別:

f() // call f(); wait for it to return go f() // create a new goroutine that calls f(); don't wait12

channels
Channels are the pipes that connect concurrent goroutines.
幾個(gè)關(guān)鍵字:管道 連接。

package mainimport "fmt"func main() { messages := make(chan string) go func() { messages

用了make聲明,時(shí)引用類型。

順序時(shí)鐘服務(wù)器
之前的博客已經(jīng)介紹了很多,如何使用net/http包來構(gòu)建一個(gè)服務(wù)器,關(guān)于golang中time package在昨天的博客中也有介紹了。
TCP 服務(wù)器,直接上代碼:

package mainimport ( "io" "log" "net" "time")func main() { listener, err := net.Listen("tcp", "localhost:8080") if err != nil { log.Fatal(err) } for { conn, err := listener.Accept() if err != nil { log.Print(err) continue } handleConn(conn) }}func handleConn(c net.Conn) { defer c.Close() for { _, err := io.WriteString(c, time.Now().Format("2006-01-02 15:04:05")) if err != nil { return } time.Sleep(1 * time.Second) }}

然后go build即可。

nc命令介紹
centos上安裝nc命令:

yum install nmap-ncat.x86_641

作用:
(1)實(shí)現(xiàn)任意TCP/UDP端口的偵聽,nc可以作為server以TCP或UDP方式偵聽指定端口
(2)端口的掃描,nc可以作為client發(fā)起TCP或UDP連接
(3)機(jī)器之間傳輸文件
(4)機(jī)器之間網(wǎng)絡(luò)測速

使用nc命令模擬client獲得服務(wù)器時(shí)間
后臺(tái)運(yùn)行服務(wù)器:

./clock &1

使用nc命令:

nc localhost 80801

輸出結(jié)果:
2017-06-22 13:28:41
2017-06-22 13:28:42
2017-06-22 13:28:43
2017-06-22 13:28:44
2017-06-22 13:28:45
2017-06-22 13:28:46
2017-06-22 13:28:47
2017-06-22 13:28:48
2017-06-22 13:28:49
2017-06-22 13:28:50
2017-06-22 13:28:51
….

這是個(gè)順序服務(wù)器,如果多個(gè)客戶端連接的話,需要第一個(gè)結(jié)束后再執(zhí)行第二個(gè)。

支持并發(fā)的始終服務(wù)器
很簡單,在上面的代碼在handle中加入關(guān)鍵字go即可:

package mainimport ( "io" "log" "net" "time")func main() { listener, err := net.Listen("tcp", "localhost:8080") if err != nil { log.Fatal(err) } for { conn, err := listener.Accept() if err != nil { log.Print(err) continue } go handleConn(conn) }}func handleConn(c net.Conn) { defer c.Close() for { _, err := io.WriteString(c, time.Now().Format("2006-01-02 15:04:05")) if err != nil { return } time.Sleep(1 * time.Second) }}

運(yùn)行結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的nc 模拟服务器_Go实战——实现一个并发时钟服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。