PhoneGap中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 767|回复: 0

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

[复制链接]

87

主题

87

帖子

327

积分

中级会员

Rank: 3Rank: 3

积分
327
发表于 2017-9-4 20:00:08 | 显示全部楼层 |阅读模式
本文和大家分享的主要是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)[0]
  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软件开发
it营
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|PhoneGap中文网 ( 京ICP备13027796号-1

GMT+8, 2018-7-16 16:16 , Processed in 0.310876 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表