socket通信原理:udpsocket使用編程

前言

前文使用TCP面向流的套接字,今天講解的UDP的工作方式與TCP/IP不同。UDP是用戶數據報協議,是一個面向消息的協議。

一方面,UDP不需要一個長期活動連接,所以建立UDP套接字稍微簡單一些。另一方面,UDP消息必須放在一個數據報中。

在IPv4中,數據報包含65507個字節,這些字節信息中還包括首部信息。因為UDP不需要長期的連接,所以它無法得到TCP所能提供的傳輸保障。

服務器代碼

因為UDP並沒有連接,所以服務器不需要監聽和接收連接。它只需要使用bing()將其套接字與一個端口關聯,然後等待各個消息。

示例代碼如下:

import socket

# 1.創建一個套接字,
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('localhost', 10000))
while True:
    data, address = sock.recvfrom(4096)
    print(data.decode('UTF-8'), address)
    if data:
        sent = sock.sendto('已接收到你發來的消息'.encode('UTF-8'), address)

其中,recvfrom()表示從套接字讀取消息,比如客戶但發送消息後,消息與客戶但地址都在裡面。

至於sendto()很好理解,就是發送消息給別人。參數1表示消息內容,參數2就是發送到哪裡(也就是對方的地址)。

客戶端代碼

客戶端當然比服務器更簡單,因為UDP不需要連接,可以直接將消息發送到服務器,並使用recvfrom()響應。示例如下:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
    msg = "發送消息到服務器".encode('utf-8')
    sent = sock.sendto(msg, ('localhost', 10000))
    data, server = sock.recvfrom(4096)
    print(data.decode())
finally:
    sock.close()

同樣的,這裡sock.recvfrom()用於接收服務器反饋的消息內容與地址。運行之後,效果如下所示:

socket庫:Python實現UDP客戶和服務器通信
socket庫:Python實現UDP客戶和服務器通信

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227918.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 21:25
下一篇 2024-12-09 21:25

相關推薦

發表回復

登錄後才能評論