找回密码
 注册
查看: 1973|回复: 0

udp 的基本使用例子python

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-25 09:00:04 | 显示全部楼层 |阅读模式
UDP通信

1 `( f/ `, b: x6 j
数据报协议(自带报头)

: l3 A# ^( u/ I6 L
没有双向通道 通信类似于发讯息

7 w- J- e8 P* [  g% m
* f  G' I( U& E0 C/ j; h! L

7 r5 T5 n! z5 z
1.udp协议客户端允许发空; a4 Z, t* M0 y7 F( M
2.udp协议不会粘包
; C( L( M# _+ j" h7 b: n, j3.udp协议服务端不存在的情况下,客户端照样不会报错?
/ q: ?& J+ J7 p+ ]% q$ A) G4.udp协议支持并发
& \- s) \9 ?# U# a# T8 o/ `
UDP类似于发短信7 e" y* Q' v5 @2 n
TCP类似于打电话8 r- C; ?8 f4 l

  z0 A! T) ?. e: g5 b4 D1 ]' I4 y并发:看起来像同时运行的
. p% ?* Z- l' t# ]7 I1 F" R3 ?并行:真正意义上的同时运行

7 N+ c! n( c- t0 V
- V" U4 d1 B5 O# i8 L& L  {4 B; i- o) r5 _* j7 f  v
udp 的基本使用
6 ^+ f5 p) ?/ A/ w. w客户端* C* f) z" E5 w( T  t/ E* L9 F  D
import socket
# i' @( A: s& }, P$ a! o  `client = socket.socket(type=socket.SOCK_DGRAM)
7 _* X& g( n9 d" _* q  C# 不需要建立连接  直接进入通信循环4 G. i' W. c- E6 J) W) P/ [, N4 j. v
server_address = ('192.168.13.8',8080)
- o; w8 ~: B# j) h% ewhile True:1 q0 W1 p2 G8 b
    client.sendto(b'hello',server_address)
% g7 Y7 W2 Y6 d% \8 ]) Q    data, addr = client.recvfrom(1024)
0 {* R- z6 K8 E# v    print('服务端发来的数据',data)
8 l3 t4 o# h0 P& d$ t7 ?    print('服务端的地址',addr)
8 X0 Z% A5 T  E( K+ t  H3 c: u0 O# o4 q3 Y* w
服务端
* a3 W/ a2 n) L# q, l9 }! Limport socket( ], A  G2 P2 w9 K2 U! \9 q
server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议# l- ?/ m3 P) ^4 w
server.bind(('192.168.13.8',8080))
! |% ~. @& C% {9 w7 B- x# UDP不需要设置半连接池 它也没有半连接池的概念
& F+ Q; R; g9 D7 P6 h6 P# |, [# 因为没有双向通道  不需要accept  直接就是通信循环+ @1 v$ ]3 w7 w4 w1 u+ M
while True:
/ J, h$ B- p* V    data, addr = server.recvfrom(1024)( c& ^  y' U- b: i
    print('数据:',data)  # 客户端发来的消息. p2 C* L% \0 H- @4 I  f7 v0 s6 P
    print('地址:',addr)  # 客户端的地址
5 `4 y6 A" z1 f, {' x* O    server.sendto(data.upper(),addr)
: k/ u* S' K( }1 Z& t) Lsocketserver模块
+ W5 ~1 k: q2 `& ?/ S6 P. @- d1 zimport socketserver( m, u1 l0 f; G7 K8 @; T4 U
class MyServer(socketserver.BaseRequestHandler):
% ]" W  f- u  G6 R& ^0 e6 m    def handle(self):) I) U1 I2 X5 b5 i% ?" C
        # print('来啦 老弟')/ X+ s* b$ y. W
        while True:
- Z% \; L2 e3 [/ L            data = self.request.recv(1024)
2 \* P7 j0 R2 }1 ~) ?            print(self.client_address)  # 客户端地址# e( u4 B) [6 p6 f5 S
            print(data.decode('utf-8'))" M5 F, |7 R9 R( o$ Z
            self.request.send(data.upper())
5 _* Z! a  M* x* ]$ c% kif __name__ == '__main__':$ R9 ^, c9 h. T: b, Q
    """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""; l. R8 |9 ?' N' K! X
    server = socketserver.ThreadingTCPServer(('192.168.13.8',8080),MyServer)  # 创建一个基于TCP的对象
- E- l$ \; h, W9 m    server.serve_forever()  # 启动该服务对象
6 Y) Z: y6 l' q, I% w5 e   
, s% U  V: r( F$ S. L; X    6 V! j7 x- a8 l' D; o8 f
   
) X) r# d6 \6 I) _; pimport socket
: E1 |4 a% N4 h0 |/ _3 `7 J4 f% {import time' T/ k9 [9 M- o% K" U5 d5 x
client = socket.socket(type=socket.SOCK_DGRAM)
9 g$ E, W( P& Y$ Yserver_address = ('192.168.13.8',8080)
) e3 L: F  n+ c3 Z) g/ }5 A) d4 fwhile True:
% r# u0 O, A, E& e( @. t* l    client.sendto(b'hello',server_address)
0 k; V; l! Q$ @4 D; [    data,addr = client.recvfrom(1024)
5 }4 m2 A: L( l! s. g( h    print(data.decode('utf-8'),addr)* s. ^, X+ {6 e9 b3 S% W* {
    time.sleep(1)% D& c' s6 c1 O! A3 F( D4 {& J/ Z
5 X( t* c! O* z5 W* o

3 A+ W- B$ }4 s- \5 ]8 Q6 w( P  y# ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 04:24 , Processed in 0.023009 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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