update
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import socket
|
||||
import time
|
||||
|
||||
from timeit import default_timer as timer
|
||||
from six.moves import zip_longest
|
||||
|
||||
|
||||
class Socket(object):
|
||||
def __init__(self, family, type_, timeout):
|
||||
s = socket.socket(family, type_)
|
||||
s.settimeout(timeout)
|
||||
self._s = s
|
||||
|
||||
def connect(self, host, port=80):
|
||||
self._s.connect((host, int(port)))
|
||||
|
||||
def shutdown(self):
|
||||
self._s.shutdown(socket.SHUT_RD)
|
||||
|
||||
def close(self):
|
||||
self._s.close()
|
||||
|
||||
|
||||
class Timer(object):
|
||||
def __init__(self):
|
||||
self._start = 0
|
||||
self._stop = 0
|
||||
|
||||
def start(self):
|
||||
self._start = timer()
|
||||
|
||||
def stop(self):
|
||||
self._stop = timer()
|
||||
|
||||
def cost(self, funcs, args):
|
||||
self.start()
|
||||
for func, arg in zip_longest(funcs, args):
|
||||
if arg:
|
||||
func(*arg)
|
||||
else:
|
||||
func()
|
||||
|
||||
self.stop()
|
||||
return self._stop - self._start
|
||||
|
||||
|
||||
def ping(host: str, port: int, count: int = 10, timeout: int = 10):
|
||||
"""
|
||||
|
||||
:param host:
|
||||
:param port:
|
||||
:param count:
|
||||
:param timeout:
|
||||
:return:
|
||||
"""
|
||||
failed = 0
|
||||
succeed = 0
|
||||
l_timer = Timer()
|
||||
conn_times = []
|
||||
for n in range(1, count + 1):
|
||||
s = Socket(socket.AF_INET, socket.SOCK_STREAM, timeout)
|
||||
try:
|
||||
time.sleep(1)
|
||||
cost_time = l_timer.cost((s.connect, s.shutdown), ((host, port), None))
|
||||
s_runtime = 1000 * cost_time
|
||||
# print("Connected to %s[:%s]: seq=%d time=%.2f ms" % (host, port, n, s_runtime))
|
||||
conn_times.append(s_runtime)
|
||||
except socket.timeout:
|
||||
print("Connected to %s[:%s]: seq=%d time out!" % (host, port, n))
|
||||
failed += 1
|
||||
else:
|
||||
succeed += 1
|
||||
|
||||
finally:
|
||||
s.close()
|
||||
return succeed / count
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
xxx = ping('192.168.195.194', 2077, 10, 10)
|
||||
print(xxx)
|
||||
Reference in New Issue
Block a user