Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Опросить игровой сервер (пинг)


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

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) не получилось разобраться.

Автор: diadiavova 18.7.2011, 07:44
http://msdn.microsoft.com/ru-ru/library/system.net.networkinformation.ping.aspx#MtViewDropDownText

Автор: DENSHER 18.7.2011, 14:54
 а можно пример  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, получить цифры.

Автор: diadiavova 18.7.2011, 16:26
Примеры есть в документации к методу Send этого класса

Автор: Bazzy 25.7.2011, 16:32
Не очень понял как тут может помочь 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

Автор: krewin 25.7.2011, 17:39
Блин ! ну что так сложно сделать 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


Автор: transparent 5.8.2011, 15:28
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)