Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опросить игровой сервер (пинг) 
:(
    Опции темы
DENSHER
Дата 18.7.2011, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Помоги пожалуйста опросить игровой сервер на пинг.
Нашел пример кода(не дописаного):
Код

Private Shared Function cmd(b As Byte()) As Byte()
    Dim ba As Byte() = New [Byte](b.Length + 3) {}
    ba(0) = &Hff
    ba(1) = &Hff
    ba(2) = &Hff
    ba(3) = &Hff

    Dim count As Integer = 4
    For i As Integer = 0 To b.Length - 1
        ba(System.Math.Max(System.Threading.Interlocked.Increment(count),count - 1)) = b(i)
    Next

    Return ba
End Function

Private A2A_PING As Byte() = cmd(New Byte() {&H69})

Public Function Ping() As Integer
    Dim client As New UdpClient()
    client.Ttl = 100
    client.Connect(hosty, porty)
    Dim ip As New IPEndPoint(IPAddress.Any, 0)
    client.Send(A2A_PING, A2A_PING.Length)
    before = DateTime.Now

    Dim req As Byte() = client.Receive(ip)

    after = DateTime.Now

    Return (after - before).Milliseconds
End Function


но воспользоваться им не получается.
Адрес сервера для опроса 212.76.131.41:27015

Так же, здесь http://developer.valvesoftware.com/wiki/Server_queries (3.1 A2A_PING) не получилось разобраться.
PM MAIL   Вверх
diadiavova
Дата 18.7.2011, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142





--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
DENSHER
Дата 18.7.2011, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



 а можно пример  smile 

Нашел на php вариант
Код

Anyway the following code (PHP) can be used to check CS server status.

<?php
` $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($socket, "212.76.131.41", 27015);

    socket_write($socket, "\xFF\xFF\xFF\xFF\x69");

    if (@socket_read($socket, 5) == "\xFF\xFF\xFF\xFF\x6A") {
        echo '<FONT COLOR=lime>Online</FONT>';
    } else {
        echo '<FONT COLOR=red>Offline</FONT>';
    }

    socket_close($socket);
?>`

этот пример на VB хотелось бы, а за место текста  Online, получить цифры.
PM MAIL   Вверх
diadiavova
Дата 18.7.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Примеры есть в документации к методу Send этого класса


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Bazzy
Дата 25.7.2011, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 25.7.2011

Репутация: нет
Всего: нет



Не очень понял как тут может помочь Ping

Вот накидал функцию, должна работать
Код

 Function PingPort(ByVal inputIP As String, ByVal inputPort As String) As Single
        Dim sock As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, _
                                                System.Net.Sockets.SocketType.Stream, _
                                                System.Net.Sockets.ProtocolType.Tcp)
        Dim ipadr As System.Net.IPAddress = Nothing
        Dim port As Integer = 0
        If Not (System.Net.IPAddress.TryParse(inputIP, ipadr)) Or Not (Integer.TryParse(inputPort, port)) Then Return -2

        sock.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, _
                             System.Net.Sockets.SocketOptionName.SendTimeout, _
                             3000)
        Try
            sock.Connect(ipadr, port)
        Catch ex As Exception
            Return -1
        End Try
        If sock.Connected = True Then
            Dim worktime As Double
            Dim buff(31) As Byte
            For i As Integer = 0 To UBound(buff)
                buff(i) = Byte.Parse(1)
            Next
            Dim recievebuff(255) As Byte
            Dim starttime As DateTime = DateTime.Now


            sock.Send(buff)
            sock.Receive(recievebuff, 0, sock.Available, Net.Sockets.SocketFlags.None)
            worktime = (DateTime.Now - starttime).TotalMilliseconds
            MsgBox("Ping : " & worktime & " ms" & vbCrLf & buff.Length & " bytes send")
            sock.Close()
            Return worktime
        Else
            Return -1
        End If
    End Function


Это сообщение отредактировал(а) Bazzy - 25.7.2011, 23:01
PM MAIL   Вверх
krewin
Дата 25.7.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 27.8.2009

Репутация: 1
Всего: 1



Блин ! ну что так сложно сделать smile 

 
Код

 Dim a As New System.Net.NetworkInformation.Ping
        Dim s As System.Net.NetworkInformation.IPStatus
        Try
            s = a.Send("ya.ru").Status
            If s = 0 Then
                MsgBox("Сервер живой !")
            Else
                MsgBox("У сервера проблемы #" & s)
            End If
        Catch
            MsgBox("Ошибка сервера возможно его не существует")
        End Try


PM MAIL   Вверх
transparent
Дата 5.8.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 7.5.2011

Репутация: нет
Всего: нет



Код

If a.Send("ya.ru").Status = Net.NetworkInformation.IPStatus.Success Then

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.