【问题标题】:How can I ping a specific port and report the results?如何 ping 特定端口并报告结果?
【发布时间】:2022-01-19 00:47:02
【问题描述】:

我正在为我的朋友制作一个不和谐机器人。 !status 这一功能应该 ping 服务器并报告回复。

    from tcping import Ping
    if message.content.startswith('!status'):
        ping = Ping('HOST', 25565)
        response = ping.ping(1)
        await message.channel.send(str(response))

问题是,机器人只响应“无”。有什么帮助吗?

【问题讨论】:

  • 好吧,当ping.ping(1) 被调用时,你认为应该发生什么?文档说明了它的作用是什么?特别是,它对返回的内容有何说明? this 是你说的图书馆吗?如果是这样,您应该尝试使用那里的问题系统来询问它。 Stack Overflow 不是技术支持。不过,欢迎。

标签: python server discord bots ping


【解决方案1】:

我猜你想看看是否有可用的东西(而不是 ping)......如果这是真的,这可能对你有用......

import socket

def check(host,port,timeout=2):
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #presumably 
    sock.settimeout(timeout)
    try:
       sock.connect((host,port))
    except:
       return False
    else:
       sock.close()
       return True

print(check('google.com',1234,timeout=1))
print(check('google.com',443,timeout=1))

也许你想计时……很简单

import time
def timed_check(host,port,timeout=2):
    t0 = time.time()
    if check(host,port,timeout):
       return time.time()-t0 # a bit inexact but close enough

print(timed_check('google.com',1234,timeout=1))
print(timed_check('google.com',443,timeout=1))

或者你可能想要统计数据

def timed_stats_check(host,port,timeout=2,retries=5): 
    minimum,maximum,sumation = float('inf'),float('-inf'),0
    errors = 0
    for i in range(retries):
        t = timed_check(host,port,timeout)
        if t is None:
           print("ERROR Unreachable...")
           errors += 1
        else:
            print(f"Time {t:0.5f}s")
            maximum = max(maximum,t)
            minimum = min(minimum,t)
            sumation += t
    if retries > 0:
        print(f"Max Time: {maximum:0.5f}s")
        print(f"Min Time: {minimum:0.5f}s")
        print(f"Average: {sumation/(retries-errors):0.2f}s")
    print(f"Failures: {errors}/{retries}")

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多