<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] ## Socket介紹 socket把tcp/ip協議層的各種數據封裝、數據發送、接收等通過代碼已經封裝好了,使用者只需要調用幾行代碼,就可以給別的機器發消息。 ### 什么是socket? Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,**它是一組接口**。把復雜的TCP/IP協議族隱藏在Socket接口后面,用戶只需要了解簡單的接口使用。 socket起源于Unix的基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關閉close”模式 來操作。 Socket就是該模式的一個實現,socket即是一種特殊的文件,一些socket函數就是對其進行的操作(讀/寫IO、打開、關閉) ### Socket通信套路 當通過socket建立起2臺機器的連接后,本質上socket只干2件事,一是收數據,一是發數據,沒數據時就等著。 socket 建立連接的過程跟我們現實中打電話比較像,以下是偽代碼模擬說明: **接電話方(socket服務器端):** ~~~ 1、買手機(創建socket對象) 2、綁定手機卡(綁定ip和端口) 3、開機(打開監聽) 4、等電話鏈接(建立tcp連接) 5、收發消息(recv和send) 6、掛電話(關閉tcp連接) 7、關機(關閉socket對象) ~~~ **打電話方(socket客戶端):** ~~~ 1、買手機(創建socket對象) 4、撥號(與server建立tcp連接) 3、發收消息(send和recv) 4、關機(關閉socket對象) ~~~ ![圖解](https://images2015.cnblogs.com/blog/880592/201612/880592-20161201235006318-975867767.png) ## Socket套接字方法 ### **socket 實例類** ``` socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ``` **family(socket家族)** * socket.AF_UNIX:用于本機進程間通訊 為了保證程序安全,兩個獨立的程序(進程)間是不能互相訪問彼此的內存的,但為了實現進程間的通訊,可以通過創建一個本地的socket來完成 * socket.AF_INET:用于網絡間通信(還有AF\_INET6被用于ipv6) **socket type類型** * socket.SOCK_STREAM tcp類型,低效但可靠的網絡傳輸類型 * socket.SOCK_DGRAM udp類型,高效但不可靠的網路傳輸類型 **proto=0**請忽略,特殊用途 **fileno=None**請忽略,特殊用途 ### 服務端套接字函數 * s.bind() 綁定(主機,端口號)到套接字 * s.listen() 開始TCP監聽 * s.accept() 被動接受TCP客戶的連接,(阻塞式)等待連接的到來 ### 客戶端套接字函數 * s.connect() 主動初始化TCP服務器連接 * s.connect_ex() 擴展版本,出錯時返回出錯碼,而不是拋出異常 ### 公共用途的套接字函數 * s.recv() 接收數據 * s.send() 發送數據 send在待發送數據量大于己端緩存區剩余空間時,數據丟失,不會發完 * s.sendall() 發送完整的TCP數據 本質就是循環調用send,sendall在待發送數據量大于己端緩存區剩余空間時,數據不丟失,循環調用send直到發完 * s.recvfrom() 從套接字接收數據。返回值是元組(字節、地址) * s.getpeername() 連接到當前套接字的遠端的地址 * s.close() 關閉套接字 * socket.setblocking(flag) 設置socket為非阻塞模式,io異步時會用 * socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) 返回遠程主機的地址信息 例子: socket.getaddrinfo('baidu.com',80) * socket.getfqdn() 拿到本機的主機名 * socket.gethostbyname() 通過域名解析ip地址
                  <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>

                              哎呀哎呀视频在线观看