易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 1968|回复: 0
收起左侧

udp 的基本使用例子python

[复制链接]
发表于 2021-8-25 09:00:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
UDP通信
0 S0 U* E& d; @) m- D1 x- ?% S
数据报协议(自带报头)
# \: r# V& y" X# w7 X: v: J
没有双向通道 通信类似于发讯息

; G: j) E4 v+ d; f7 V; D
% ^/ k" V: t# H
, x/ b. s7 e& R1 {
1.udp协议客户端允许发空. d) I" s) o% l: R8 |2 ?
2.udp协议不会粘包# U, \$ Q" F/ b9 _4 J
3.udp协议服务端不存在的情况下,客户端照样不会报错?
/ Z5 ^& B5 G6 u( X' s4.udp协议支持并发

- u5 d! B) k# S7 \
UDP类似于发短信$ Q9 ?6 {4 L7 ?5 y
TCP类似于打电话6 n6 s0 J8 G2 }

% q4 V0 P5 |3 P+ D" ]+ p" n3 R并发:看起来像同时运行的
4 i' n6 H" _$ n+ t; K并行:真正意义上的同时运行
9 }" `- \* @% Z+ M) v
' j1 L7 A! v, T/ s9 X

- K5 _3 L2 @# J( Eudp 的基本使用
+ t- J3 u4 n  |6 ^- u: J, K. n2 i客户端* W2 c. |9 R9 \/ f9 b7 W
import socket
6 J* [0 ^. i7 m  Pclient = socket.socket(type=socket.SOCK_DGRAM)9 M. @$ K" R( b1 [$ t
# 不需要建立连接  直接进入通信循环1 ^0 C) y9 C+ _5 e! ~7 u
server_address = ('192.168.13.8',8080)
: K+ x, `  R* qwhile True:
0 G; t" b9 Q  b* Z# Z    client.sendto(b'hello',server_address)
; O0 Y5 G$ c0 L: c8 u( d    data, addr = client.recvfrom(1024)  }: E( b' ]/ `* ]1 n& o' \
    print('服务端发来的数据',data)& ^1 S! D! h% B; |9 n3 L
    print('服务端的地址',addr)) A- b- v& E4 M( k# Y

/ T/ a4 G* b6 K! D  t: g服务端
0 C" y8 T# M/ [4 J& mimport socket
5 q1 O8 X- \4 [7 j  Jserver = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议8 L. R" w; M. P! V4 j& B
server.bind(('192.168.13.8',8080))
3 Z1 W+ r! G" J% f2 w" ~6 X' b# t$ G# UDP不需要设置半连接池 它也没有半连接池的概念" Z- S( h( U# E9 \+ g: W: V; L
# 因为没有双向通道  不需要accept  直接就是通信循环. }# L% ^1 r1 K7 M
while True:
. O. ~3 X+ ]$ z/ D( W/ P- e    data, addr = server.recvfrom(1024)9 d. ]/ J/ z4 d- F3 J0 d+ v
    print('数据:',data)  # 客户端发来的消息
* T, ]5 I, ?9 n, F    print('地址:',addr)  # 客户端的地址! E5 U% _& l0 E" e0 ~7 y0 m6 i2 y  l" z
    server.sendto(data.upper(),addr)
4 b3 q, {* l" Q+ M. [3 fsocketserver模块- ~$ \2 z3 {2 c: h1 O, G2 ~
import socketserver
3 Q! M7 z. A' m, g  N% ^4 H, Zclass MyServer(socketserver.BaseRequestHandler):/ B+ ^! k6 T/ {6 u( C8 j9 X, i
    def handle(self):
% A7 a" _" f2 {/ c# V        # print('来啦 老弟')
% _6 \) r# L, a% ]! f0 d0 S        while True:
( N, p; L. Y+ t  Q  B  n  g            data = self.request.recv(1024)
0 \4 X5 n1 T$ {* P; P2 {            print(self.client_address)  # 客户端地址: `7 y6 y7 t7 s6 v8 N
            print(data.decode('utf-8'))3 i& u4 N# B" \8 s& p
            self.request.send(data.upper())
- [, Q6 ~9 K( p& b4 t# E" [5 Sif __name__ == '__main__':* b! z) ?5 j" @' C
    """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""
7 m, _& ?2 \; z0 r    server = socketserver.ThreadingTCPServer(('192.168.13.8',8080),MyServer)  # 创建一个基于TCP的对象
* _) y  ]( L  x/ K, C( w5 |2 `, J, b    server.serve_forever()  # 启动该服务对象: w5 |0 S: v- Z8 |# o0 R/ a: V6 O( B
   
4 ]1 ]8 K+ M( p, Z' e8 S: I2 k6 r    3 Z/ E4 l3 A0 O& _# n
   * G+ u0 }# V' \: Z
import socket) h% {1 F" e3 D
import time
& N2 Z, A4 ^6 J- K. g; E( ^client = socket.socket(type=socket.SOCK_DGRAM)& F  k  a5 Q. j+ _9 K
server_address = ('192.168.13.8',8080)( h' r. v- Y- Y" C5 x9 y+ A3 w- q  o
while True:
" T* P9 V! q. H$ I4 n    client.sendto(b'hello',server_address)
! ~7 r2 |8 j7 o" U8 o. e; j    data,addr = client.recvfrom(1024). Y& M# C) F4 u) P- ^
    print(data.decode('utf-8'),addr), K8 c4 Q& `- {/ D# Y
    time.sleep(1)
8 I8 L+ a9 [8 z5 \) I2 M8 e' S. K6 F
) k: w# H- f1 n  y" t; k+ A7 I# ~
# ]& e$ s$ ]! c) w( q
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:39 , Processed in 0.051620 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表