udp 的基本使用

UDP通訊
    數據報協議(自帶報頭)
    沒有雙向通道 通訊相似於發短信

1.udp協議客戶端容許發空
2.udp協議不會粘包
3.udp協議服務端不存在的狀況下,客戶端照樣不會報錯?
4.udp協議支持併發

UDP相似於發短信
TCP相似於打電話
    
併發:看起來像同時運行的
並行:真正意義上的同時運行

udp 的基本使用

客戶端python

import socket

client = socket.socket(type=socket.SOCK_DGRAM)
# 不須要創建鏈接  直接進入通訊循環
server_address = ('127.0.0.1',8080)
while True:
    client.sendto(b'hello',server_address)
    data, addr = client.recvfrom(1024)
    print('服務端發來的數據',data)
    print('服務端的地址',addr)

服務端併發

import socket

server = socket.socket(type=socket.SOCK_DGRAM)  # UDP協議
server.bind(('127.0.0.1',8080))
# UDP不須要設置半鏈接池 它也沒有半鏈接池的概念

# 由於沒有雙向通道  不須要accept  直接就是通訊循環
while True:
    data, addr = server.recvfrom(1024)
    print('數據:',data)  # 客戶端發來的消息
    print('地址:',addr)  # 客戶端的地址
    server.sendto(data.upper(),addr)

socketserver模塊

import socketserver

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        # print('來啦 老弟')
        while True:
            data = self.request.recv(1024)
            print(self.client_address)  # 客戶端地址
            print(data.decode('utf-8'))
            self.request.send(data.upper())

if __name__ == '__main__':
    """只要有客戶端鏈接  會自動交給自定義類中的handle方法去處理"""
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)  # 建立一個基於TCP的對象
    server.serve_forever()  # 啓動該服務對象
    
    
   
import socket
import time

client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('127.0.0.1',8080)

while True:
    client.sendto(b'hello',server_address)
    data,addr = client.recvfrom(1024)
    print(data.decode('utf-8'),addr)
    time.sleep(1)
相關文章
相關標籤/搜索