tcp編程、socket編程
阿新 • • 發佈:2018-02-05
open image udp編程 pen ... new pan fun 終端
tcp編程(需要建立連接,三次握手,四次揮手,然後發送信息流,數據包是有序的)
udp編程(知道IP、端口直接發送數據,數據包可能是無序的)
1、客戶端和服務器客
socket編程
1.服務端的處理流程
a.監聽端口
b.接收客戶端的鏈接
c.創建goroutine,處理該鏈接
2.客戶端的處理流程
a.建立與服務端的鏈接
b.進行數據收發
c.關閉鏈接
3.服務端代碼
package main import ( "fmt" "net"//導入socket的包 ) func main() { fmt.Println("start server...") listen, err :View Code= net.Listen("tcp", "0.0.0.0:50000")//監聽50000端口 if err != nil { fmt.Println("listen failed, err:", err) return } for { conn, err := listen.Accept()//等待客戶端連接 if err != nil { fmt.Println("accept failed, err:", err) continue } go process(conn) } } func process(conn net.Conn) { defer conn.Close()for { buf := make([]byte, 512) _, err := conn.Read(buf)//讀取客戶端傳輸過來的數據 if err != nil { fmt.Println("read err:", err) return } fmt.Println("read: ", string(buf)) } }
4.客戶端代碼
package main import ( "bufio" "fmt" "View Codenet" "os" "strings" ) func main() { conn, err := net.Dial("tcp", "localhost:50000") //建立鏈接 if err != nil { fmt.Println("Error dialing", err.Error()) return } defer conn.Close() inputReader := bufio.NewReader(os.Stdin) //從終端讀取數據 for { input, _ := inputReader.ReadString(‘\n‘) //從終端讀取一行數據 trimmedInput := strings.Trim(input, "\r\n")//去掉字符串\r\n if trimmedInput == "Q" { return } _, err = conn.Write([]byte(trimmedInput))//將信息發給服務端 if err != nil { return } } }
tcp編程、socket編程