基於UDP協議的socket編程
阿新 • • 發佈:2017-12-03
tcp server end 註意 發出 發生 數據報 無連接 允許
UDP協議特點:
1.無連接。服務端與客戶端傳輸數據之前不需要進行連接,且沒有超時重發等機制,只是把數據通過網絡發送出去。也正是因為此特點,所以基於UDP協議的socket的客戶端在啟動之前不需要先啟動服務端。
2.不可靠。數據在本地通過網絡發出之後,UDP協議會立即清除本地的緩存,即使對方沒有收到該數據,也不做任何補救措施。
3.數據報協議。
代碼示例:
1 import socket 2 server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 3 ‘‘‘ 4 1.UDP協議是數據報協議,因此不會產生字節流,不像TCP一樣是字節流協議,故不會發生粘包現象。5 2.UDP不穩定的原因為:udp在把數據和地址+端口發出去之後,會立即清除緩存,而且沒有確認信息,因此不安全。 6 3.UDP協議對應一發一收,因此不像TCP那樣要把連接掛起,更不用監聽,只要始終處於接收客戶端即可。 7 ‘‘‘ 8 ip_port = (‘127.0.0.1‘,8899) 9 server.bind(ip_port) 10 while True: 11 data_bytes,client_addr = server.recvfrom(1024) 12 server.sendto(data_bytes,client_addr)
1 importsocket 2 client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 3 ip_port = (‘127.0.0.1‘,8899) 4 while True: 5 msg=input(‘>>>:‘) 6 client.sendto(msg.encode(‘utf-8‘),ip_port) 7 data_bytes,server_addr = client.recvfrom(1024) 8 print(data_bytes.decode(‘utf-8‘))
註意:
基於UDP協議的客戶端可以開啟多個進程,表面上實現了並發,但同一時刻只能允許一個客戶端與服務端通信,因此基於UDP協議的socket並沒有實現並發。
基於UDP協議的socket編程