Python用UDP編寫乙個簡單的通訊例項

2021-10-01 06:01:54 字數 1920 閱讀 4003

python實現tcp通訊的例項:

udp是面向無連線的協議,使用udp協議時,不需要建立連線,只需要知道對方的ip位址和埠號,就可以直接發資料報。優點是速度快,協議簡單,而且由於udp無需建立連線所以可支援廣播傳送等,但其缺點是無法保證資料可靠到達。

接下來我嘗試用python實現udp協議的端對端通訊。

socket函式原型及引數選擇:

int socket(int domain, int type, int protocol)

socket(af_inet/af_inet6/af_packet/af_unix/ af_local,sock_stream/sock_dgram/sock_seqpacket/sock_raw,ipproto_tcp/ipptoto_udp/ipproto_sctp/ipproto_tipctcp)

# 匯入套接字的包

import socket

# 建立udp的套接字

# 在本程式中的引數選擇如下:

# socket(ipv4網路通訊, 資料報套接字, udp傳輸協議)

s = socket.socket(socket.af_inet, socket.sock_dgram)

# 客戶端ip和埠號

host = '127.0.0.1'

port = 9999

s.bind((host, port))

# 迴圈接收client資料

while true:

# 利用recvfrom()方法獲取資料和客戶端的資訊

data, addr = s.recvfrom(1024)

print("received from %s: %s" % (addr, data.decode('gb2312')))

s.sendto('i got it!'.encode('gb2312'), addr)

輸出結果

注意事項

需要注意的是,由於addr有兩個元素,如下圖:

所以在輸出如若不加括號,則addr的第二個元素會在第二個%s處列印,導致輸出**觀。

# 匯入套接字的包

import socket

host = '127.0.0.1'

port = 9999

# 客戶端使用udp時,首先仍然建立基於udp的socket,然後,直接通過sendto()給伺服器發資料

s = socket.socket(socket.af_inet, socket.sock_dgram)

while true:

print('please input your data:')

inputdata = input('> ')

# 傳送資料

s.sendto(inputdata.encode('gb2312'), (host, port))

# 接收資料

receivedata = s.recv(1024)

print(receivedata.decode('gb2312'))

輸出結果

注意事項

由於傳輸資料時的資料格式為byte,所以在使用資料時需要進行資料格式的轉換,本例項中採用encode()和decode()函式進行簡易轉換,且採用gb2312編碼可以支援漢字資訊。

用python編寫乙個小遊戲

1.隨機生成兩個數字 1 1000 在控制台中隨機獲取兩個數字相加 如果使用者輸入正確得10分,否則扣10分。總共5道題,最後輸出得分 import random grade 0for i in range 5 num1 random.randint 1,100 num2 random.randin...

用python編寫乙個計算器

1 2 60 30 40.0 5 9 2 5 3 7 3 99 4 2998 10 568 14 4 3 16 3 2 通過python實現,自動判斷括號以及加減乘除的運算優先順序,得出運算結果,顯示運算步驟 import redef atom cal exp if in exp 計算單個的乘法 a...

用python編寫乙個vim目錄管理外掛程式

命令 作用例項 py3 執行一條python語句 py3fprint hello world py3f 執行乙個python模組 py3f test.py 即在python中可以 import vim 然後使用該模組操作vim 表示vim當前所在 其中提供了如下屬性 line 當前所在行 buffe...