<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、概念 * Socket又稱“套接字”,應用程序通常通過“套接字”向網絡發出請求或者應答網絡請求 * 常用的Socket類型有兩種:流式Socket和數據報式Socket,流式是一種面向連接的Socket,針對于面向連接的TCP服務應用,數據報式Socket是一種無連接的Socket,針對于無連接的UDP服務應用 * IP是數字型,是32位整數,4個8位2進制數,每8位用圓點隔開,每個8位整數可以轉換為0~255的十進制整數 * 端口號:0~65535 ## 二、TCP服務端代碼 ~~~ package main import ( "net" "fmt" "strings" ) func main() { //創建監聽,socket listener, err := net.Listen("tcp", "127.0.0.1:8888") if err != nil { fmt.Println(err) } defer listener.Close() //死循環,等待請求 for { //等待客戶端連接 conn, err := listener.Accept() if err != nil { fmt.Println(err) continue } //每次開啟一個子協程處理客戶端請求 go ClientConn(conn) } } func ClientConn(conn net.Conn) { defer conn.Close() //取連接地址 ipAddr := conn.RemoteAddr().String() fmt.Println(ipAddr, "連接成功") //緩沖區用于讀寫 buf := make([]byte, 1024) for { //等待用戶發送的數據 //n 接收數據長度 n, err := conn.Read(buf) if err != nil { fmt.Println(err) return } //截取客戶端發送的有效數據 result := buf[:n] fmt.Printf("接收到數據來自[%s]==>[%d]:%s\n", ipAddr, n, string(result)) if "exit" == string(result) { fmt.Println(ipAddr, "退出連接") return } //給客戶端回應 conn.Write([]byte(strings.ToUpper(string(result)))) } } ~~~ ## 三、 TCP客戶端代碼 ~~~ package main import ( "net" "fmt" ) func main() { //客戶端主動連接服務端 conn, err := net.Dial("tcp", "127.0.0.1:8888") if err != nil { fmt.Println(err) return } defer conn.Close() //緩沖區 buf := make([]byte, 1024) for { fmt.Printf("請輸入發送的內容:") fmt.Scan(&buf) fmt.Printf("發送的內容:%s\n", string(buf)) //發送數據 conn.Write(buf) //讀數據 n, err := conn.Read(buf) if err != nil { fmt.Println(err) return } //截取數據 result := buf[:n] fmt.Printf("接收到數據[%d]:%s\n", n, string(result)) } } ~~~
                  <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>

                              哎呀哎呀视频在线观看