admin 发表于 2021-8-25 09:00:04

udp 的基本使用例子python

UDP通信
数据报协议(自带报头)
没有双向通道 通信类似于发讯息


1.udp协议客户端允许发空
2.udp协议不会粘包
3.udp协议服务端不存在的情况下,客户端照样不会报错?
4.udp协议支持并发
UDP类似于发短信
TCP类似于打电话

并发:看起来像同时运行的
并行:真正意义上的同时运行


udp 的基本使用
客户端
import socket
client = socket.socket(type=socket.SOCK_DGRAM)
# 不需要建立连接直接进入通信循环
server_address = ('192.168.13.8',8080)
while True:
    client.sendto(b'hello',server_address)
    data, addr = client.recvfrom(1024)
    print('服务端发来的数据',data)
    print('服务端的地址',addr)

服务端
import socket
server = socket.socket(type=socket.SOCK_DGRAM)# UDP协议
server.bind(('192.168.13.8',8080))
# UDP不需要设置半连接池 它也没有半连接池的概念
# 因为没有双向通道不需要accept直接就是通信循环
while True:
    data, addr = server.recvfrom(1024)
    print('数据:',data)# 客户端发来的消息
    print('地址:',addr)# 客户端的地址
    server.sendto(data.upper(),addr)
socketserver模块
import socketserver
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
      # print('来啦 老弟')
      while True:
            data = self.request.recv(1024)
            print(self.client_address)# 客户端地址
            print(data.decode('utf-8'))
            self.request.send(data.upper())
if __name__ == '__main__':
    """只要有客户端连接会自动交给自定义类中的handle方法去处理"""
    server = socketserver.ThreadingTCPServer(('192.168.13.8',8080),MyServer)# 创建一个基于TCP的对象
    server.serve_forever()# 启动该服务对象
   
   
   
import socket
import time
client = socket.socket(type=socket.SOCK_DGRAM)
server_address = ('192.168.13.8',8080)
while True:
    client.sendto(b'hello',server_address)
    data,addr = client.recvfrom(1024)
    print(data.decode('utf-8'),addr)
    time.sleep(1)


页: [1]
查看完整版本: udp 的基本使用例子python