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]