<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之旅 廣告
                [TOC] ## 1. socket簡介 ### 1. 本地進程間通信有很多種方式 * 隊列 * 同步 ### 2. 網絡之間的通信 ![](https://box.kancloud.cn/d6f4d6d73bec418eae01bed4d6d7a7ab_795x607.png) 1. 在本地可以通過PID表示一個進程,但是網絡中這樣是行不通的。 2. tcp/ip幫我們解決了這個問題,網絡層(IP地址)可以唯一標識網絡中的主機,而傳輸層(協議+端口)可以標識主機中的應用程序(進程) 3. 這樣利于IP地址,協議,端口就可以標識網絡中的進程了。 ## 2. 創建socket `socket.socket(AddressFamily, Type)` 函數 socket.socket 創建?個 socket, 返回該 socket 的描述符, 該函數帶有 > * 兩個參數: > 1. Address Family: > 可以選擇 AF_INET(?于 Internet 進程間通信) 或者AF_UNIX(?于同?臺機器進程間通信) ,實際?作中常?AF_INET > 2. Type: > 套接字類型, 可以是 SOCK_STREAM(流式套接字, 主要?于TCP 協議) 或者 SOCK_DGRAM(數據報套接字, 主要?UDP協議) 1. 創建?個tcp socket(tcp套接字) ~~~ import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket Created' ~~~ 2. 創建?個udp socket(udp套接字) ~~~ import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print 'Socket Created ~~~ ### 2.1 UDP ?戶數據報協議, 是?個?連接的簡單的?向數據報的`傳輸層`協議。 #### UDP特點: > UDP是?向?連接的通訊協議, UDP數據包括?的端?號和源端?號信息,由于通訊不需要連接, 所以可以實現?播發送。 UDP傳輸數據時有??限制, 每個被傳輸的數據報必須限定在64KB之內。 UDP是?個不可靠的協議, 發送?所發送的數據報并不?定以相同的次序到達接收?。 #### 適?情況 > UDP是?向消息的協議, 通信時不需要建?連接, 數據的傳輸?然是不可靠 > 的, UDP?般?于多點通信和實時的數據業務, ?如 > 語??播 > 視頻 > QQ > TFTP(簡單?件傳送) > SNMP(簡單?絡管理協議) > RIP(路由信息協議, 如報告股票市場, 航空信息) > DNS(域名解釋) > #### client端 ~~~ from socket import * #1. 創建套接字 udpSocket = socket(AF_INET, SOCK_DGRAM) #2. 準備接收?的地址 sendAddr = ('192.168.1.103', 8080) #3. 從鍵盤獲取數據 sendData = raw_input("請輸?要發送的數據:") #4. 發送數據到指定的電腦上 udpSocket.sendto(sendData, sendAddr) #5. 關閉套接字 udpSocket.close() ~~~ server端 ~~~ #coding=utf-8 from socket import * #1. 創建套接字 udpSocket = socket(AF_INET, SOCK_DGRAM) # udp綁定信息 綁定本地的相關信息, 如果?個?絡程序不綁定, 則系統會隨機分配 bindAddr = ('', 7788) # ip地址和端?號, ip?般不?寫, 表示本機的任何?個ip udpSocket.bind(bindAddr) #3. 等待接收對?發送的數據 recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最?字節數 #4. 顯示接收到的數據 print recvData #5. 關閉套接字 udpSocket.close() ~~~ #### 通信過程 ![](https://box.kancloud.cn/2a55f8c912feeb4f40e0b30ded3cf5bc_735x543.png) #### 廣播 > 單播 點對點 > 多播 一對多 > 廣播 一對所有 > * 廣播udp可以使用,tcp沒有 1. 服務端 ~~~ import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) PORT = 7788 # '<broadcast>'會根據實際情況判斷廣播地址,寫真實廣播地址也可以就是不通用 network = '<broadcast>' s.sendto('hello everybody'.encode('utf-8'), (network, PORT)) while True: (content,address) = s.recvfrom(1024) print("receive from %s: %s"%(address,content.decode('utf-8'))) ~~~ 2. 客戶端 ~~~ from socket import * udp = socket(AF_INET,SOCK_DGRAM) udp.bind(('',7788)) data = udp.recvfrom(1024) content,source = data # 和Scala類似 print(content.decode("utf-8")) # 解碼 udp.sendto('hello'.encode('utf-8'),source) ~~~
                  <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>

                              哎呀哎呀视频在线观看