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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                //TCP的C/S架構 //TCP客戶端:net.Dial() Write() Read() Close() //TCP服務器:net.Listen() Accept() Read() Write() Close() /* Unix基本哲學之一就是“一切皆文件”, 都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。 Socket就是該模式的一個實現,網絡的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。 Socket也具有一個類似于打開文件的函數調用:Socket(),該函數返回一個整型的Socket描述符, 隨后的連接建立、數據傳輸等操作都是通過該Socket實現的 */ //常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。 服務端 ~~~ package main import ( "fmt" "log" "net" "strings" ) func dealConn(conn net.Conn) { defer conn.Close() ipAddr := conn.RemoteAddr().String() fmt.Println(ipAddr, "連接成功") buf := make([]byte, 1024) for { //阻塞等待用戶發送的數據 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)))) } } func main() { listenner, err := net.Listen("tcp", "127.0.0.1:8001") //go中的接口被占用報錯:An attempt was made to access a socket in a way forbidden by its access permissions. if err != nil { log.Fatal(err) //log.Fatal()會產生panic } for { conn, err := listenner.Accept() if err != nil { log.Println(err) continue } go dealConn(conn) } } ~~~ 客戶端 ~~~ package main import ( "fmt" "log" "net" ) func main() { //客戶端主動連接服務器 conn, err := net.Dial("tcp", "127.0.0.1:8001") if err != nil { log.Fatal(err) //log.Fatal()會產生panic return } defer conn.Close() //關閉 buf := make([]byte, 1024) //緩沖區 for { fmt.Printf("請輸入發送的內容:") fmt.Scan(&buf) //相當于Python中的input-->>buf = input("請輸入發送的內容") 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>

                              哎呀哎呀视频在线观看