• recv与recvfrom的区别及基于udp实现ntp服务


    '''recv与recvfrom的区别及基于udp实现ntp服务'''
    from socket import *
    '''服务端'''
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    
    udp_server = socket(AF_INET, SOCK_DGRAM)
    
    udp_server.bind(ip_port)
    #
    # while True:
    #  data, addr = udp_server.recvfrom(buffer_size) # 可以收到为空的消息
    #  print(data)
    #  # msg = input('请输入:')
    #  udp_server.sendto(data.upper(), addr)
    #
    # udp_server.close()
    
    # 因为udp没有建立链接这么一说,所以就这样也可以实现并发的效果,多个客户端链接并发送消息都可以处理,而tcp一次只能处理一个
    
    
    '''ntp服务'''
    import time
    while True:
       data, addr = udp_server.recvfrom(buffer_size)
       if not data:
          fmt = '%Y-%m-%d %X'
       else:
          fmt = data.decode('utf-8')
       back_time = time.strftime(fmt) # 输入只要是符合%Y %m %d %X就都可以返回对应的时间及格式
       udp_server.sendto(back_time.encode('utf-8'), addr) # 如果数据类型为整型或浮点型,必须先转为字符串,然后再进行编码
    
    udp_server.close()
    from socket import *
    '''客户端'''
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    # while True:
    #  msg = input('请输入:').strip() # 输入为空时,服务端能收到一个为空的消息,服务端也发送给了一个为空转成大写(也是为空)的消息给客户端;而tcp会阻塞
    #  udp_client.sendto(msg.encode('utf-8'), ip_port)
    #  data, addr = udp_client.recvfrom(buffer_size)
    #  print(data)
    #
    # udp_client.close()
    
    
    '''ntp服务'''
    while True:
       msg = input('请输入:').strip()
       udp_client.sendto(msg.encode('utf-8'), ip_port)
       data, addr = udp_client.recvfrom(buffer_size)
       print(data.decode('utf-8'))
    
    udp_client.close()
    from socket import *
    '''客户端1'''
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    # while True:
    #  msg = input('请输入:').strip() # 输入为空时,服务端能收到一个为空的消息,服务端也发送给了一个为空转成大写(也是为空)的消息给客户端;而tcp会阻塞
    #  udp_client.sendto(msg.encode('utf-8'), ip_port)
    #  data, addr = udp_client.recvfrom(buffer_size)
    #  print(data)
    #
    # udp_client.close()
    
    
    '''ntp服务'''
    while True:
       msg = input('请输入:').strip()
       udp_client.sendto(msg.encode('utf-8'), ip_port)
       data, addr = udp_client.recvfrom(buffer_size)
       print(data.decode('utf-8'))
    
    udp_client.close()
    while True: print('studying...')
  • 相关阅读:
    在同步块中修改指向同步对象的引用
    算法学习记录3 插入排序
    算法学习记录2 归并排序
    算法学习记录1 快速排序
    CE学习记录1
    jenkins 学习记录2
    jenkins 学习记录1
    扩展 jquery miniui 组件实现自动查询数据
    java对象与XML相互转化
    分享公司缓存的用法
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14790975.html
Copyright © 2020-2023  润新知