Ответы пользователя по тегу Разработка игр
  • Как раздуплить Source-Query на Python 3+?

    Kademn
    @Kademn
    Злой
    Ваш код рабочий, если не считать последней строчки, где вы к строке плюсуете байты. Ответ вы не получаете потому, что запрос составлен неправильно, но это уже вопрос не языка программирования или сокетов, а формата запросов и ответов. Запрос должен начинаться с четырёх 'FF' байт.
    import socket
     
    IP = '195.62.53.149'
    PORT = 27015
     
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.connect((IP, PORT))
    sock.send(b'\xff\xff\xff\xffTSource Engine Query')
    sock.settimeout(120)
    text = sock.recv(1024)
    print(b'res ->' + text)


    > python cs_udp.py 
    b'recv -> \xff\xff\xff\xffI0Euro-Cs.Ru | Public | 1000FPS\x00de_dust2_2x2\x00cstrike\x00Counter-Strike\x00\n\x00\x03\x14\x00dl\x00\x011.1.2.7/Stdio\x00\x80\x87i'


    UPD:
    Я никогда не работал с этим форматом. Есть библиотека pytho-valve. Первый же пример из её документации отлично отрабатывает с твоим сервером без лишних телодвижений.
    import valve.source.a2s
    
    SERVER_ADDRESS = ('195.62.53.149', 27015)
    
    with valve.source.a2s.ServerQuerier(SERVER_ADDRESS) as server:
        info = server.info()
        players = server.players()
    
    print("{player_count}/{max_players} {server_name}".format(**info))
    for player in sorted(players["players"],
                         key=lambda p: p["score"], reverse=True):
        print("{score} {name}".format(**player))


    > python udp_client.py 
    4/20 Euro-Cs.Ru | Public | 1000FPS
    39 1UP|mam?a
    31 zakeman4
    16 Cosmodesant
    0 (А.У.Е.ШПАНА) хуй


    Ссылка на документацию
    Ответ написан
    3 комментария