w8484855@qq.com 发表于 2017-9-4 20:00:08

Python中使用asyncore创建时间服务客户端方法详解

本文和大家分享的主要是python中使用asyncore创建时间服务客户端相关内容,一起来看看吧,希望对大家学习python有所帮助。
  asyncore是提供一个响应的网络框架,在这里,这个模块是要应该干什么事情时,才让你去做。
  为了实现这种异步调用,需要继承dispatcher类,改写这个类的方法:
  writable是当数据发送出去时调用。
  readable是当有数据收到准备处理时调用。
  handle_connect是当连接建立时调用。
  handle_expt是当连接失败或者数据接收超时调用。
  handle_accept是监听端口接收到连接时调用。
  handle_read是从socket里有数据接收时调用。
  handle_write是socket可以发送数据时调用。
  handle_close是当socket关闭或者复位时调用。
  handle_error是如果python错误出现时调用。
  # File: asyncore-example-1.py
  import asyncoreimport socket, time, struct
  # reference time (in seconds since 1900-01-01 00:00:00)
  TIME1970 = 2208988800 # 1970-01-01 00:00:00
  class TimeRequest(asyncore.dispatcher):
  # time requestor (as defined in RFC 868)
  def __init__(self, host, port=37):
  asyncore.dispatcher.__init__(self)
  self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
  self.connect((host, port))
  def writable(self):
  return 0 # don't have anything to write
  def handle_connect(self):
  print('connected.')
  #pass # connection succeeded
  def handle_expt(self):
  self.close() # connection failed, shutdown
  def handle_read(self):
  # get local time
  here = int(time.time()) + TIME1970
  # get and unpack server time
  t = self.recv(4)
  t = struct.unpack("!I", t)
  self.adjust_time(int(here - t))
  self.handle_close() # we don't expect more data
  def handle_close(self):
  self.close()
  def adjust_time(self, delta):
  # override this method!
  print("time difference is", delta)
  ## try it out
  print('time.nist.gov...')
  request = TimeRequest("time.nist.gov")
  asyncore.loop()
  输出结果如下:
  time.nist.gov...
  connected.
  time difference is -4


来源:大坡3D软件开发
页: [1]
查看完整版本: Python中使用asyncore创建时间服务客户端方法详解