日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux中UDP程序流程、客户端、服务端

發布時間:2024/7/5 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中UDP程序流程、客户端、服务端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UDP--- 用戶數據報協議(User Datagram Protocol),是一個無連接的簡單的面向數據報的運輸層協議。

?

優點:傳輸速度快

缺點:不可靠

?

socket的中文意思是接插件:

?

創建socket

在 Python 中 使用socket 模塊的類 socket 就可以完成:

?

socket.socket(AddressFamily,Type)

說明:

函數 socket.socket 創建一個 socket,返回該 socket的描述符,該函數帶有兩個參數:

  • Address Family:可以選擇 AF_INET(用于 Internet 進程間通信) 或者 AF_UNIX(用于同一臺機器進程間通信),實際工作中常用AF_INET
  • Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協議)或者 SOCK_DGRAM(數據報套接字,主要用于 UDP 協議)

?

udp服務端:

import socket

# 1. 創建套接字
server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

#2. bind綁定ip地址和端口,為元祖tuple類型
#ip如果不指明,表示本機的任何一個ip地址
server_addr = (
"", 8080)
server_sock.bind(server_addr)

while True:
???
# recv方法接收發送過來的數據
???
# 返回值為接收到的數據,參數(這里為1024)表示本次收取數據的最大字節數
???
# receive_data = server_sock.recv(1024)
???
# recvfromrecv方法類似,不同的是可以將發送數據的客戶端的地址也返回
??? receive_data, client_addr =server_sock.recvfrom(
1024)
???
# 注意python3中收到的數據receive_databytes類型
???
# print(client_addr, ": ",receive_data)
???
# bytes數據轉換為字符串類型
??? msg = receive_data.decode(
"utf-8")
???
# 將收到的數據顯示輸出
??? print(client_addr,
": ", msg)
???
# 我們假定如果客戶端發送了quit,我們就關閉服務端的套接字(即關閉服務端)
???
if msg == "quit":
??????? server_sock.close()
???????
break

測試:

# -u 表示使用udp協議
# nc -u 服務器ip 服務器端口
nc -u
127.0.0.1 8080

?

udp客戶端

import socket

# 1. 創建套接字
client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服務器地址
server_addr = (
'127.0.0.1', 8080)

data = input("請輸入要發送的內容:")
#只要用戶輸入的數據不為空,就向服務器端發送
while data:
???
# 2. 使用sendto方法向服務器發送數據
???
# sendto(bytes類型要發送的數據, 對方的地址)
??? client_sock.sendto(data.encode(
"utf-8"),server_addr)
??? data = input(
"請輸入要發送的內容:")

# 當用戶輸入的數據為空(""), 關閉客戶端套接字
client_sock.close()

測試

服務端與客戶端的程序我們都已完成,可以同時開啟進行測試。

我們也可以用nc充當udf服務端來單獨測試客戶端程序。

# -l 表示作為服務端開啟,進行監聽listen
# -u表示使用udp協議
# nc-lu 綁定的服務器ip地址 端口
nc -lu
127.0.0.1 8080

?

網絡編程中的廣播

import socket

# 創建udp套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 告訴系統內核剛創建的套接字用來進行廣播
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,
1)
data = input(
"請輸入要廣播的內容:")
while data:
???
# 注意對于廣播對象地址的設置
???
# <broadcast>表示廣播地址
??? s.sendto(data.encode(
"utf-8"), ("<broadcast>", 8080))
??? data = input(
"請輸入要廣播的內容:")

s.close()

?

udp總結

1.udp是傳輸層的一種協議,不需要進行連接就可以用來發送和接收數據,但不保證數據的可靠傳輸。

2. udp服務器、客戶端

1、udp的服務器和客戶端的區分:往往是通過請求服務提供服務來進行區分

2請求服務的一方稱為:客戶端

3、提供服務的一方稱為:服務器

3. udp綁定問題

1、一般情況下,服務器端,需要綁定端口,目的是為了讓其他的客戶端能夠正確發送到此進程

2、客戶端,一般不需要綁定,而是讓操作系統隨機分配,這樣就不會因為需要綁定的端口被占用而導致程序無法運行的情況

總結

以上是生活随笔為你收集整理的linux中UDP程序流程、客户端、服务端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。