網絡編程-06基於UDP協議的socket套接字編程

一丶什麼是UDP

  • UDP是無連接的,先啓動哪一端都不會報錯
  • UDP協議是數據報協議,發空的時候也會自帶報頭,所以客戶端輸入空,服務端也能收到
  • UPD協議通常不用於傳輸大數據。
  • UDP套接字雖然沒有粘包問題,可是不能替代TCP套接字,由於UPD協議有一個缺陷:若是數據發送的途中,數據丟失,則數據就丟失了,而TCP協議則不會有這種缺陷,所以通常UPD套接字用戶可有可無的數據發送,例如qq聊天。

1.1服務端python

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)

1.2客戶端socket

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)

二丶UDP實現簡易QQ

2.1服務端大數據

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)

2.2客戶端code

import socket


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

while True:
    msg = input('>>>:')
    msg = '來自客戶端5的消息:%s'%msg
    client.sendto(msg.encode('utf-8'),server_address)
    data, server_addr = client.recvfrom(1024)
    print(data.decode('utf-8'))
相關文章
相關標籤/搜索