




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Go語言實現服務端消息接收和發送本文實例為大家分享了Go實現服務端消息接收和發送的具體代碼,供大家參考,具體內容如下
一.服務端接收數據并返回數據
服務端代碼
packagemain
import(
"net"
"fmt"
funcmain(){
//創建TCPAddress變量,指定協議tcp4,監聽本機8899端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//監聽TCPAddress設定的地址
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服務器已啟動")
//阻塞式等待客戶端消息,返回連接對象,用于接收客戶端消息或向客戶端發送消息
conn,_:=lis.Accept()
//把數據讀取到切片中
b:=make([]byte,256)
fmt.Println("read之前")
//客戶端沒有發送數據且客戶端對象沒有關閉,Read()將會阻塞,一旦接收到數據就不阻塞
count,_:=conn.Read(b)
fmt.Println("接收到的數據:",string(b[:count]))
/*
向客戶端發送數據
*/
conn.Write([]byte("這是服務器傳遞的數據"))
//關閉連接
conn.Close()
fmt.Println("服務器結束")
}
客戶端代碼
packagemain
import(
"net"
"fmt"
funcmain(){
//服務器端ip和端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//申請連接客戶端
conn,_:=net.DialTCP("tcp4",nil,addr)
//向服務端發送數據
count,_:=conn.Write([]byte("客戶端傳遞的數據"))
fmt.Println("客戶端向服務端發送的數據量為:",count)
/*
接收服務器傳遞回來的數據
*/
b:=make([]byte,256)
c,_:=conn.Read(b)
fmt.Println(string(b[:c]))
關閉連接
conn.Close()
fmt.Println("客戶端結束")
}
可以在服務端添加循環,不停接收客戶端發送來的數據,服務端代碼修改如下
packagemain
import(
"net"
"fmt"
funcmain(){
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服務器已啟動")
/*
服務器端添加死循環,不停的接收客戶端對象
*/
for{
conn,_:=lis.Accept()
b:=make([]byte,256)
count,_:=conn.Read(b)
nc:=string(b[:count])
fmt.Println("接收到的數據:",nc)
conn.Write([]byte("服務器:"+nc))
conn.Close()
fmt.Println("服務器結束")
}
客戶端代碼修改如下
packagemain
import(
"net"
"fmt"
"strconv"
funcmain(){
//服務器端ip和端口
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
//通過循環,模擬發送五次客戶端請求
fori:=1;ii++{
conn,_:=net.DialTCP("tcp4",nil,addr)
conn.Write([]byte("客戶端數據"+strconv.Itoa(i)))
b:=make([]byte,256)
c,_:=conn.Read(b)
fmt.Println("第",i,"次服務器返回的數據:",string(b[:c]))
conn.Close()
fmt.Println("客戶端結束")
}
三.并發訪問
上面代碼的問題是服務器獲取到客戶端對象后,如果客戶端什么也沒有輸入,其他客戶端無法連接.可以通過結合goroutine完成并發訪問
只需要修改server.go,在里面添加goroutine
packagemain
import(
"net"
"fmt"
funcmain(){
addr,_:=net.ResolveTCPAddr("tcp4","localhost:8899")
lis,_:=net.ListenTCP("tcp4",addr)
fmt.Println("服務器已啟動")
/*
服務器端添加死循環,不停的接收客戶端對象
*/
for{
conn,_:=lis.Accept()
gofunc(){//在此處添加創建gofunc()即可
b:=make([]byte,256)
count,_:=conn.Read(b)
nc:=string(b[:count])
fmt.Println("接收到的數據:",n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國環境氣體行業市場前景預測及投資價值評估分析報告
- 2025至2030年中國加筋管成型機行業投資前景及策略咨詢研究報告
- 2025年碳化硅陶瓷纖維項目提案報告
- 初中生物教學計劃五
- 2025年獸用診斷制品項目提案報告
- 2025年自動化控制系統項目申請報告
- 水庫安全監測與評估計劃
- 化學復習考試模擬計劃
- 2025公司管理人員安全培訓考試試題【典型題】
- 2025年新入職員工安全培訓考試試題及答案真題匯編
- 八省聯考陜西試題及答案
- 腔隙性腦梗塞護理常規
- 2025年入團積極分子培訓考試題庫及答案
- 人工智能在價格預測中的應用-深度研究
- 《新聞傳播學》課件
- Unit 3 The world of Science 大單元教學設計-2023-2024學年高中英語外研版(2019)必修第三冊
- 延邊大學《物聯網技術1》2023-2024學年第二學期期末試卷
- 2024年山東省濟南市中考英語試題卷(含答案解析)
- 2025中考英語作文預測:19個熱點話題及范文
- 基礎寫作-終結性考核(期末考試)-國開(SC)-參考資料
- 中建路基邊坡防護及排水專項施工方案
評論
0/150
提交評論