這里寫目錄標題
- TCP客戶端(client)
- TCP服務端(server)
TCP客戶端(client)
package main
import (
"bufio"
"fmt"
"net"
"os"
"strings"
)
/*
一個TCP客戶端進行TCP通信的流程如下:
1.建立與服務端的鏈接
2.進行資料收發
3.關閉鏈接
*/
//1.與服務器建立連接
//2.進行連接資料收發
//2.1從終端讀取資訊
//2.2發送到服務器
//2.3接收服務器資訊
func main() {
//1.與服務器建立連接
conn, err := net.Dial("tcp", "127.0.0.1:20001")
if err != nil {
fmt.Printf("dial failed,err:%v", err)
return
}
//2.根據鏈接進行資料收發
//2.1創建一個從終端讀取的物件
input := bufio.NewReader(os.Stdin)
//for就是一直發送接收
for {
//2.2利用從終端讀取資訊的物件讀到換行
ss, _ := input.ReadString('\n')
//2.3把讀取的資訊空格去掉
strings.TrimSpace(ss)
//2.4如果ss內容是大寫就退出
if strings.ToUpper(ss) == "Q" {
return
}
//2.5如果ss內容不是q,就將終端的內容寫入鏈接
n, err := conn.Write([]byte(ss))
if err != nil {
fmt.Printf("send failed,err:%v\n", err)
}
//fmt.Println(n)
//2.6從服務端讀訊息
//2.6.1這只一次讀多少內容
var buf [1024]byte
//2.6.2開始讀取資訊
n, err = conn.Read(buf[:])
if err != nil {
fmt.Printf("read failed,err:%v",err)
}
//fmt.Printf("讀取了%d位元組\n", n)
fmt.Printf("收到服務端回復:%v",string(buf[:n]))
//3.關閉鏈接
}
}
TCP服務端(server)
package main
import (
"bufio"
"fmt"
"net"
)
/*
TCP服務端程式的處理流程:
監聽埠
接收客戶端請求建立鏈接
創建goroutine處理鏈接,
*/
//創造處理鏈接的函式
func process(conn net.Conn) {
//2.最后要關閉這個鏈接
defer conn.Close()
//1.根據鏈接進行資料的接收和發送操作
//1.1根據這個tcp鏈接conn,創建一個從鏈接conn讀的物件
reader := bufio.NewReader(conn)
//1.
var buf [128]byte
n, err := reader.Read(buf[:])
if err != nil {
fmt.Printf("read from conn failed,err:%d", err)
}
ret := buf[:n]
fmt.Printf("從鏈接讀取的資料是:%v", string(ret))
conn.Write([]byte("親親,收到了"))
}
func main() {
//1.啟動監聽 先放上耳朵
listener, err := net.Listen("tcp", "127.0.0.1:20001")
if err != nil {
fmt.Printf("listen failed,err:%v", err)
return
}
//2.等待客戶建立連接 //for不斷的建立鏈接處理鏈接
for {
conn, err := listener.Accept() //如果err為空,代表拿到了鏈接
if err != nil {
fmt.Printf("conn accept failed,err:%v", err)
continue
}
//3.啟動gouroutine去處理鏈接
go process(conn)
}
}
代碼在編輯器的位置:

注意:
1.先啟動服務端
2.在啟動客戶端
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303552.html
標籤:其他
上一篇:架構師大型專案實戰視頻
下一篇:計算機組成原理(7)定點運算
