1. 程式人生 > >基於UDP協議的socket編程

基於UDP協議的socket編程

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 import
socket 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編程