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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ### TCP Vs UDP `TCP`是建立可靠連接,并且通信雙方都可以以流的形式發送數據。相對`TCP`,`UDP`則是面向無連接的協議。 使用`UDP`協議時,不需要建立連接,只需要知道對方的`IP`地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。 雖然用`UDP`傳輸數據不可靠,但它的優點是和`TCP`比,速度快,對于不要求可靠到達的數據,就可以使用`UDP`協議。 ### 服務器端 #### 綁定端口 我們來看看如何通過`UDP`協議傳輸數據。和`TCP`類似,使用`UDP`的通信雙方也分為客戶端和服務器。服務器首先需要綁定端口: ~~~ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 綁定端口: s.bind(('127.0.0.1', 9999)) ~~~ 創建`Socket`時,`SOCK_DGRAM`指定了這個`Socket`的類型是`UDP`。綁定端口和`TCP`一樣,但是不需要調用listen()方法,而是直接接收來自任何客戶端的數據: #### 接收數據 ~~~ print('Bind UDP on 9999...') while True: # 接收數據: data, addr = s.recvfrom(1024) print('Received from %s:%s.' % addr) s.sendto(b'Hello, %s!' % data, addr) ~~~ `recvfrom()`方法返回數據和客戶端的地址與端口,這樣,服務器收到數據后,直接調用`sendto()`就可以把數據用`UDP`發給客戶端。 注意這里省掉了多線程,因為這個例子很簡單。 ### 客戶端 客戶端使用`UDP`時,首先仍然創建基于`UDP`的`Socket`,然后,不需要調用`connect()`,直接通過`sendto()`給服務器發數據: ~~~ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for data in [b'Michael', b'Tracy', b'Sarah']: # 發送數據: s.sendto(data, ('127.0.0.1', 9999)) # 接收數據: print(s.recv(1024).decode('utf-8')) s.close() ~~~ 從服務器接收數據仍然調用`recv()`方法。 仍然用兩個命令行分別啟動服務器和客戶端測試,結果如下: ![image](http://www.liaoxuefeng.com/files/attachments/001410430396036690e72578d74495aa5482a1579c841af000) ### 小結 `UDP`的使用與`TCP`類似,但是不需要建立連接。此外,服務器綁定`UDP`端口和`TCP`端口互不沖突,也就是說,`UDP`的`9999端口`與`TCP`的`9999端口`可以各自綁定。
                  <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>

                              哎呀哎呀视频在线观看