欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言實現(xiàn)服務(wù)端消息接收和發(fā)送

 更新時間:2022年07月26日 09:29:28   作者:書香水墨  
這篇文章主要為大家詳細(xì)介紹了Go語言實現(xiàn)服務(wù)端消息接收和發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Go實現(xiàn)服務(wù)端消息接收和發(fā)送的具體代碼,供大家參考,具體內(nèi)容如下

一. 服務(wù)端接收數(shù)據(jù)并返回數(shù)據(jù)

服務(wù)端代碼

package main

import (
? ?"net"
? ?"fmt"
)

func main() {
? ?//創(chuàng)建TCPAddress變量,指定協(xié)議tcp4,監(jiān)聽本機(jī)8899端口
? ?addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")

? ?//監(jiān)聽TCPAddress設(shè)定的地址
? ?lis, _ := net.ListenTCP("tcp4", addr)

? ?fmt.Println("服務(wù)器已啟動")

? ?//阻塞式等待客戶端消息,返回連接對象,用于接收客戶端消息或向客戶端發(fā)送消息
? ?conn, _ := lis.Accept()

? ?//把數(shù)據(jù)讀取到切片中
? ?b := make([]byte, 256)
? ?fmt.Println("read之前")
? ?//客戶端沒有發(fā)送數(shù)據(jù)且客戶端對象沒有關(guān)閉,Read()將會阻塞,一旦接收到數(shù)據(jù)就不阻塞
? ?count, _ := conn.Read(b)
? ?fmt.Println("接收到的數(shù)據(jù):", string(b[:count]))

? ?/*
? ?向客戶端發(fā)送數(shù)據(jù)
? ? */
? ?conn.Write([]byte("這是服務(wù)器傳遞的數(shù)據(jù)"))

? ?//關(guān)閉連接
? ?conn.Close()
? ?fmt.Println("服務(wù)器結(jié)束")
}

客戶端代碼

package main

import (
? ?"net"
? ?"fmt"
)

func main() {
? ?//服務(wù)器端ip和端口
? ?addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")
? ?//申請連接客戶端
? ?conn, _ := net.DialTCP("tcp4", nil, addr)
? ?//向服務(wù)端發(fā)送數(shù)據(jù)
? ?count, _ := conn.Write([]byte("客戶端傳遞的數(shù)據(jù)"))
? ?fmt.Println("客戶端向服務(wù)端發(fā)送的數(shù)據(jù)量為:", count)

? ?/*
? ?接收服務(wù)器傳遞回來的數(shù)據(jù)
? ? */
? ?b := make([]byte, 256)
? ?c, _ := conn.Read(b)
? ?fmt.Println(string(b[:c]))

? ?關(guān)閉連接
? ?conn.Close()
? ?fmt.Println("客戶端結(jié)束")

}

可以在服務(wù)端添加循環(huán),不停接收客戶端發(fā)送來的數(shù)據(jù),服務(wù)端代碼修改如下

package main

import (
? ?"net"
? ?"fmt"
)

func main() {
? ?addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")
? ?lis, _ := net.ListenTCP("tcp4", addr)
? ?fmt.Println("服務(wù)器已啟動")

? ?/*
? ?服務(wù)器端添加死循環(huán),不停的接收客戶端對象
? ? */
? ?for {
? ? ? conn, _ := lis.Accept()
? ? ? b := make([]byte, 256)
? ? ? count, _ := conn.Read(b)
? ? ? nc := string(b[:count])
? ? ? fmt.Println("接收到的數(shù)據(jù):", nc)
? ? ? conn.Write([]byte("服務(wù)器:" + nc))
? ? ? conn.Close()
? ?}
? ?fmt.Println("服務(wù)器結(jié)束")
}

客戶端代碼修改如下

package main

import (
? ?"net"
? ?"fmt"
? ?"strconv"
)

func main() {
? ?//服務(wù)器端ip和端口
? ?addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")

? ?//通過循環(huán),模擬發(fā)送五次客戶端請求
? ?for i := 1; i <= 5; i++ {
? ? ? conn, _ := net.DialTCP("tcp4", nil, addr)
? ? ? conn.Write([]byte("客戶端數(shù)據(jù)" + strconv.Itoa(i)))
? ? ? b := make([]byte, 256)
? ? ? c, _ := conn.Read(b)
? ? ? fmt.Println("第", i, "次服務(wù)器返回的數(shù)據(jù):", string(b[:c]))
? ? ? conn.Close()
? ?}

? ?fmt.Println("客戶端結(jié)束")

}

三.并發(fā)訪問

上面代碼的問題是服務(wù)器獲取到客戶端對象后,如果客戶端什么也沒有輸入,其他客戶端無法連接.可以通過結(jié)合goroutine完成并發(fā)訪問
只需要修改server.go,在里面添加goroutine

package main

import (
? ?"net"
? ?"fmt"
)

func main() {
? ?addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899")
? ?lis, _ := net.ListenTCP("tcp4", addr)
? ?fmt.Println("服務(wù)器已啟動")

? ?/*
? ?服務(wù)器端添加死循環(huán),不停的接收客戶端對象
? ? */
? ?for {
? ? ? conn, _ := lis.Accept()
? ? ? go func() { //在此處添加創(chuàng)建go func()即可
? ? ? ? ?b := make([]byte, 256)
? ? ? ? ?count, _ := conn.Read(b)
? ? ? ? ?nc := string(b[:count])
? ? ? ? ?fmt.Println("接收到的數(shù)據(jù):", nc)
? ? ? ? ?conn.Write([]byte("服務(wù)器:" + nc))
? ? ? ? ?conn.Close()
? ? ? }()
? ?}
? ?fmt.Println("服務(wù)器結(jié)束")
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 8種超簡單的Golang生成隨機(jī)字符串方式分享

    8種超簡單的Golang生成隨機(jī)字符串方式分享

    這篇文章主要為大家詳細(xì)介紹了8種超簡單的Golang生成隨機(jī)字符串方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • golang?Gorm框架講解

    golang?Gorm框架講解

    gorm是一個使用Go語言編寫的ORM框架,這篇文章主要介紹了golang?Gorm框架,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Go語言程序查看和診斷工具詳解

    Go語言程序查看和診斷工具詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言程序查看和診斷工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 深入了解Go的HttpClient超時機(jī)制

    深入了解Go的HttpClient超時機(jī)制

    在寫?Go?的過程中經(jīng)常對比這Java和GO語言的特性,踩了不少坑,也發(fā)現(xiàn)了不少有意思的地方,今天就來聊聊?Go?自帶的?HttpClient?的超時機(jī)制
    2022-11-11
  • Go語言單元測試模擬服務(wù)請求和接口返回

    Go語言單元測試模擬服務(wù)請求和接口返回

    這篇文章主要為大家介紹了Go語言單元測試模擬服務(wù)請求和接口返回示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 安裝GoLang環(huán)境和開發(fā)工具的圖文教程

    安裝GoLang環(huán)境和開發(fā)工具的圖文教程

    Go是一門由Google開發(fā)的編程語言,GoLand的安裝非常簡單,本文主要介紹了安裝GoLang環(huán)境和開發(fā)工具的圖文教程,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Go語言自定義包構(gòu)建自己的編程工具庫

    Go語言自定義包構(gòu)建自己的編程工具庫

    Go 語言的強(qiáng)大不僅體現(xiàn)在其內(nèi)置功能上,還在于其支持自定義包,這為開發(fā)者提供了極大的靈活性和可擴(kuò)展性,本文將深入介紹如何創(chuàng)建、使用和管理自定義包,探索 Go 語言包的奧秘,打造屬于你的編程工具庫
    2023-11-11
  • go中控制goroutine數(shù)量的方法

    go中控制goroutine數(shù)量的方法

    這篇文章主要介紹了go中控制goroutine數(shù)量的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 基于go語言實現(xiàn)圖片驗證碼的代碼示例

    基于go語言實現(xiàn)圖片驗證碼的代碼示例

    這篇文章主要為大家詳細(xì)介紹了基于go語言實現(xiàn)圖片驗證碼的代碼示例,文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Golang中可比較的數(shù)據(jù)類型詳解

    Golang中可比較的數(shù)據(jù)類型詳解

    在日常開發(fā)中,比較操作是最常用的基本操作之一,可以用來判斷變量之間是否相等或者對應(yīng)的大小關(guān)系,本文將深入解析 Golang 中可比較的數(shù)據(jù)類型,并結(jié)合代碼示例來說明如何在不同情況下進(jìn)行比較,需要的朋友可以參考下
    2024-01-01

最新評論