golang實現簡單的tcp通信


簡單代碼

服務端

//Server.go
package main import ( "fmt"
    "net"
    "os" ) func main(){ //服務端在本機8888端口建立tcp監聽
 listener,err :=net.Listen("tcp","127.0.0.1:8888") ServerHandleError(err,"net.listen") for { //循環接入所有客戶端得到專線連接
        conn,e := listener.Accept() ServerHandleError(e,"listener.accept") //開辟獨立協程與該客聊天
 go ChatWith(conn) } } func ServerHandleError(err error,when string) { if err != nil { fmt.Println(err, when) os.Exit(1) } } //在conn網絡專線中與客戶端對話
func ChatWith(conn net.Conn){ //創建消息緩沖區
    buffer := make([]byte, 1024) for { ///---一個完整的消息回合


        //讀取客戶端發來的消息放入緩沖區
        n,err := conn.Read(buffer) ServerHandleError(err,"conn.read buffer") //轉化為字符串輸出
        clientMsg := string(buffer[0:n]) fmt.Printf("收到消息",conn.RemoteAddr(),clientMsg) //回復客戶端消息
        if clientMsg != "im off" { conn.Write([]byte("已讀:"+clientMsg)) } else { conn.Write([]byte("bye")) break } } conn.Close() fmt.Printf("客戶端斷開連接",conn.RemoteAddr()) }

客戶端

//Client.go
package main import ( "bufio"
    "fmt"
    "net"
    "os" ) func ClientHandleError(err error, when string){ if err != nil { fmt.Println(err, when) os.Exit(1) } } func main(){ //撥號遠程地址,簡歷tcp連接
    conn, err := net.Dial("tcp","127.0.0.1:8888") ClientHandleError(err, "client conn error") //預先准備消息緩沖區
    buffer := make([]byte,1024) //准備命令行標准輸入
    reader := bufio.NewReader(os.Stdin) for { lineBytes,_,_ := reader.ReadLine() conn.Write(lineBytes) n,err := conn.Read(buffer) ClientHandleError(err, "client read error") serverMsg := string(buffer[0:n]) fmt.Printf("服務端msg",serverMsg) if serverMsg == "bye" { break } } }

 

簡單測試

客戶端發消息

 

服務端讀消息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM