• udp套接字


    '''udp套接字'''
    from socket import *
    '''服务端'''
    
    ip_port = ('127.0.0.1', 8000)
    buffer_size = 1024
    # 服务器信息和recv收录字节大小,到时候这样的数据可以写到配置文件,程序代码可无需把数据写死
    
    udp_server = socket(AF_INET, SOCK_DGRAM) # DGRAM=datagram,翻译为数据报的意思
    # socket实例化
    
    udp_server.bind(ip_port)
    # 绑定服务器ip和端口
    
    while True:
       data, addr = udp_server.recvfrom(buffer_size) # 收到的消息是元组的类型,第一个参数为消息,第二个参数为元组类型的对方的ip地址和端口信息
       # recvfrom()收到客户端发送的消息,收到的addr信息是客户端的
    
       print('客户端发送的消息解压后数据为:', data, addr) # b'haha' ('127.0.0.1', 59702)
    
       udp_server.sendto(data.upper(), addr) # 发送信息需要两个参数,一个是发送数据,一个是元组类型的对方ip地址和端口信息
       # sendto()发送消息给客户端,所以addr就是写客户端的
    
    udp_server.close()
    # 关闭链接
    
    # 注意:服务端sendto()传的ip和端口信息是客户端的,但是客户端的recvfrom()收到的ip和端口信息则是服务端的(两端可互换表达意思一样)
    from socket import *
    '''客户端'''
    
    ip_port = ('127.0.0.1', 8000)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    while True:
       msg = input('请输入:').strip()
       udp_client.sendto(msg.encode('utf-8'), ip_port)
       # 发送消息给服务端,那么第二个参数就写服务端的
    
       data1, addr1 = udp_client.recvfrom(buffer_size)
       # 收到服务端发送的信息,所以addr1是服务端的ip及端口信息
    
       print('服务端发送的消息:', data1, addr1)
    
    udp_client.close()
    '''tcp和udp归纳整理'''
    # tcp服务端:socket(套接字家族,tcp协议),setsocketopt(解决由于突然断开链接引起的端口被占用情况,需要3个参数),bind(元组类型的服务器ip及端口信息),listen(监听数量),accept()--->(返回结果为元组类型,第一个为链接,第二个为客户端的ip及端口信息),recv(字节数)/send(编码后的数据),colse(),close()
    
    # tcp客户端:socket(套接字家族,tcp协议),connect(元组类型的服务器ip及端口信息),send(编码后的数据)/recv(字节数),close()
    
    
    # udp服务端:socket(套接字家族,tcp协议),bind(元组类型的服务器ip及端口信息),recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息)/sendto(编码后数据,元组形式的对方IP和端口),close()
    
    # udp客户端:socket(套接字家族,tcp协议),sendto(编码后数据,元组形式的对方IP和端口)/recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息),close()
    while True: print('studying...')
  • 相关阅读:
    338. Counting Bits
    78. Subsets
    MySQL读写分离
    AESEncryption Aes 加密
    LoopBox 用于包装循环的盒子
    ES 服务器 索引、类型仓库基类 BaseESStorage
    一键压缩脚本
    非常好用的一个分组扩展方法
    快递、拆分、合并、优选逻辑
    Git Extensions 使用小结
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14786500.html
Copyright © 2020-2023  润新知