zoukankan      html  css  js  c++  java
  • 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...')
  • 相关阅读:
    异步fifo设计(2)
    异步fifo设计(1)
    systemverilog学习(9)assertion
    cordic算法
    Booth除法器设计
    systemverilog学习(8)randomization随机化
    systemverilog学习(7)OOP
    折线法——卡特兰数证明
    【BZOJ 4004】 装备购买(高斯消元+贪心)
    POJ 3322 Bloxorz
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14790975.html
Copyright © 2011-2022 走看看