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

udp 的基本使用例子python

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-8-25 09:00:04 | 显示全部楼层 |阅读模式
UDP通信
. U/ S) Y1 A4 _& K+ h. Q9 t9 q8 D8 z
数据报协议(自带报头)

2 Y9 q; G. o; I& o5 e
没有双向通道 通信类似于发讯息

7 e. ]# i; I* \2 G

% f- b5 X7 G' d& y5 b" X
% {" G, d0 I9 U  m" n- p( \
1.udp协议客户端允许发空
+ k. d8 Z) |; Z3 f7 ^2.udp协议不会粘包" t2 k/ d% ]1 D* Q
3.udp协议服务端不存在的情况下,客户端照样不会报错?
( S/ L4 {4 o: Q4.udp协议支持并发

! @& T- W( V# ~6 X7 y
UDP类似于发短信
- m6 K/ s% x& @& @TCP类似于打电话
+ k: S8 z! Y. I2 ?7 L/ `# {9 y
# y5 Y( b5 L9 `( H并发:看起来像同时运行的
% u; j4 \. w; M7 [0 l: K/ u2 C+ Y并行:真正意义上的同时运行
/ l  T. M  o7 W' u" K9 `3 v8 ?
/ m0 V! C% g5 J) X' {

3 u0 K( ?0 G" K# qudp 的基本使用1 R$ [! ?/ F/ n; n" j* R8 M! w8 z+ l
客户端! \% c7 a* i+ g
import socket
& x8 U+ @% h, \! H0 k, Nclient = socket.socket(type=socket.SOCK_DGRAM)
: a% e& y/ I) v7 O# 不需要建立连接  直接进入通信循环
! w: C- {) u( l9 C* K/ \server_address = ('192.168.13.8',8080)
4 f) s2 D5 W! S, K7 Q9 iwhile True:
" i+ C) j& ^6 b5 Z, i6 U& i    client.sendto(b'hello',server_address)
: x+ _: K0 P! y5 j    data, addr = client.recvfrom(1024)
: R; Z% f' e8 J! j7 c- g    print('服务端发来的数据',data)4 k8 z7 q' r' p# m7 @! C3 h
    print('服务端的地址',addr)
" d# w9 y" G& Y, |4 A! ^
. T# N; \& j. n, X! Z6 n& A服务端* E; r& K7 C6 M8 k: c9 Z" }" S" c
import socket; h# }" F0 V$ |. [+ w
server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议
, f! m6 U* p) u0 Aserver.bind(('192.168.13.8',8080))
6 h4 k) C, R, t7 \- u2 q% A/ Z# UDP不需要设置半连接池 它也没有半连接池的概念3 A: p" [3 H) c! K0 h! p8 h
# 因为没有双向通道  不需要accept  直接就是通信循环" _+ {4 \+ \, T. r
while True:& Y8 k3 M# Y# Q4 c! b5 F
    data, addr = server.recvfrom(1024)5 P% z" U8 A# K7 d  h& s& g
    print('数据:',data)  # 客户端发来的消息
: H1 N! P, X2 Y, h& F+ g    print('地址:',addr)  # 客户端的地址. K8 E8 A; z- ~2 \% F
    server.sendto(data.upper(),addr)
, A3 N" d& I' i1 W+ U1 tsocketserver模块8 b1 S: o. y, {8 G
import socketserver/ s. W; `# s* A7 k2 `
class MyServer(socketserver.BaseRequestHandler):
- y/ n. q6 Z/ l8 h    def handle(self):7 z# [+ g: S9 S
        # print('来啦 老弟')/ S; X9 S1 F( p1 m9 `, `/ E
        while True:
* i3 I+ u* Q7 C. c( `. ^5 @# E, I' J% T- [            data = self.request.recv(1024)4 a. D; Y& N, N' C
            print(self.client_address)  # 客户端地址3 [6 S( c" v" Y2 S1 {
            print(data.decode('utf-8'))# }$ E4 b$ O) l' r1 b, A. `. e! l
            self.request.send(data.upper())" \+ o, Z) B$ A2 Y0 s9 W1 L
if __name__ == '__main__':6 w3 a% X4 q( t& X+ V0 b
    """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""- k/ L- s" F7 c) w+ [
    server = socketserver.ThreadingTCPServer(('192.168.13.8',8080),MyServer)  # 创建一个基于TCP的对象8 V+ h$ k% y; W. }# D
    server.serve_forever()  # 启动该服务对象
) ~. ?) P0 R4 D1 l& m/ K   
7 u+ W+ ]3 R4 q: T8 F$ v   
- h/ y& Z+ Z8 v9 a) d+ A   ' o4 {  M6 \* n# v9 j
import socket
$ |9 a' M$ y* {6 [8 N2 Z/ P% Oimport time* y$ S5 x8 @# @
client = socket.socket(type=socket.SOCK_DGRAM)9 K1 c  K# ^3 V4 R& p7 d
server_address = ('192.168.13.8',8080)
% N8 H& b8 W' q: M, S( h  z7 T0 b7 Ywhile True:- r5 D5 j( ~! c7 e  e" z' `
    client.sendto(b'hello',server_address)
' ?9 N5 a4 x" T& u+ R    data,addr = client.recvfrom(1024)/ g. @/ v8 I+ W' O
    print(data.decode('utf-8'),addr)
7 I- m+ \( o, p    time.sleep(1)
/ y0 @& }1 }4 G$ P
& |5 I* p& P6 |6 \# M8 i; \, ?! n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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