<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 ![](https://box.kancloud.cn/40138129df6d4e0980447f7eb923f815_1262x1452.png) `establish connection`是建立連接 `data transfer`數據傳輸 `close connection`關閉連接 ![](https://box.kancloud.cn/1f45b87dcb89104f5a114dab66ec1093_3046x856.png) # 服務端 ~~~ import ( "net" "fmt" ) func main() { // 指定服務器 通信協議、IP地址、port。 創建一個用于監聽的 socket listener, err := net.Listen("tcp", "127.0.0.1:8000") if err != nil { fmt.Println("net.Listen err:", err) return } defer listener.Close() fmt.Println("服務器等待客戶端建立連接...") // 阻塞監聽客戶端連接請求, 成功建立連接,返回用于通信的socket conn, err := listener.Accept() if err != nil { fmt.Println("listener.Accept() err:", err) return } defer conn.Close() fmt.Println("服務器與客戶端成功建立連接!!!") // 讀取客戶端發送的數據 buf := make([]byte, 4096) n, err := conn.Read(buf) if err != nil { fmt.Println("conn.Read err:", err) return } conn.Write(buf[:n]) // 讀多少寫多少。原封不動 // 處理數據—— 打印 fmt.Println("服務器讀到數據:", string(buf[:n])) } ~~~ # 客戶端 ~~~ import ( "net" "fmt" ) func main() { // 指定 服務器 IP + port 創建 通信套接字。 conn, err := net.Dial("tcp", "127.0.0.1:8000") if err != nil { fmt.Println("net.Dial err:", err) return } defer conn.Close() // 主動寫數據給服務器 conn.Write([]byte("Are you Ready?")) buf := make([]byte, 4096) // 接收服務器回發的數據 n, err := conn.Read(buf) if err != nil { fmt.Println("conn.Read err:", err) return } fmt.Println("服務器回發:", string(buf[:n])) } ~~~ # 并發服務器 ## 并發服務端 ~~~ package main import ( "net" "fmt" "strings" ) func HandlerConnect(conn net.Conn) { defer conn.Close() // 獲取連接的客戶端 Addr addr := conn.RemoteAddr() fmt.Println(addr, "客戶端成功連接!") // 循環讀取客戶端發送數據 buf := make([]byte, 4096) for { n, err := conn.Read(buf) //fmt.Println(buf[:n]) if "exit\n" == string(buf[:n]) || "exit\r\n" == string(buf[:n]) { fmt.Println("服務器接收的客戶端退出請求,服務器關閉") return } if n == 0 { fmt.Println("服務器檢測到客戶端已關閉,斷開連接!!!") return } if err != nil { fmt.Println("conn.Read err:", err) return } fmt.Println("服務器讀到數據:", string(buf[:n])) // 使用數據 // 小寫轉大寫,回發給客戶端 conn.Write([]byte(strings.ToUpper(string(buf[:n])))) } } func main() { // 創建監聽套接字 //listener, err := net.Listen("tcp", "127.0.0.1:8001") listener, err := net.Listen("tcp", "192.168.15.78:8001") if err != nil { fmt.Println("net.Listen err:", err) return } defer listener.Close() // 監聽客戶端連接請求 for { fmt.Println("服務器等待客戶端連接...") conn, err := listener.Accept() if err != nil { fmt.Println("listener.Accept err:", err) return } // 具體完成服務器和客戶端的數據通信 go HandlerConnect(conn) } } ~~~ ## 并發客戶端 ~~~ import ( "net" "fmt" "os" ) func main() { // 主動發起連接請求 conn, err := net.Dial("tcp", "192.168.15.78:8001") if err != nil { fmt.Println("net.Dial err:", err) return } defer conn.Close() // 獲取用戶鍵盤輸入( stdin ),將輸入數據發送給服務器 go func() { str := make([]byte, 4096) for { n, err := os.Stdin.Read(str) if err != nil { fmt.Println("os.Stdin.Read err:", err) continue } //寫給服務器, 讀多少,寫多少! conn.Write(str[:n]) } }() // 回顯服務器回發的大寫數據 buf := make([]byte, 4096) for { n, err := conn.Read(buf) if n == 0 { fmt.Println("檢查到服務器關閉,客戶端也關閉") return } if err != nil { fmt.Println("conn.Read err:", err) return } fmt.Println("客戶端讀到服務器回發:", string(buf[:n])) } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看