UDP Recieve() bevriest programma

Status
Niet open voor verdere reacties.

tyrope

Gebruiker
Lid geworden
10 feb 2006
Berichten
58
Hallo,

ik heb een programma gemaakt waarin je snel een SWAT4 server kan joinen, en wat data kan aflezen (zoals aantal spelers, welke map draait, etc.) nu is er een PHP versie uit waarin ik de udp commando's heb kunnen aflezen, het gaat als volgt als de server daadwerkelijk online is:
Programma maakt socket
Programma maakt verbinding met server.
Programma verstuurd \\status\\
Server stuurt data terug in de vorm van: \hostname\SWAT4 Server\numplayers\1\maxplayers\1\gametype\CO-OP\gamevariant\SWAT 4\mapname\FoodWall Restaurant\hostport\10480\password\0\gamever\1.1\player_0\HiImStupid\score_0\0\ping_0\42\final\
Programma sluit verbinding, en vernietigd de socket, en gaat daarna de data analyseren in een andere functie.

het probleem doet zich echter voor als de server offline is, het volgende gebeurt:
Programma maakt socket
Programma maakt verbinding met server.
Programma verstuurd \\status\\
--crash--

ik denk dat het probleem ligt in regel 13, ik heb een try/catch geprobeerd, maar dat negeert hij gewoon.

hieronder de code (inc test messageboxen).
PHP:
    Public Function getInfo()
        Dim serverIP As String = nameToIP()
        Dim serverPort As String = nameToPort()
        Dim ClientSocket As Socket
        Dim returnvalue As String
        Dim recvBuffer(8191) As Byte
        ClientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        ClientSocket.Connect(System.Net.IPAddress.Parse(serverIP), serverPort)
        MessageBox.Show("Verbinding gemaakt")
        Dim bytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes("\\status\\")
        ClientSocket.Send(bytes, bytes.Length, SocketFlags.None)
        MessageBox.Show("Versturen voltooid")
        Dim numBytes As Int32 = ClientSocket.Receive(recvBuffer, 0, recvBuffer.Length, SocketFlags.None, Nothing)
        MessageBox.Show("Data ontvangen.")
        If numBytes <> 0 Then
            Dim data As String = System.Text.ASCIIEncoding.ASCII.GetString(recvBuffer, 0, numBytes)
            returnvalue = data
        Else
            returnvalue = "data receive failed"
        End If
        Try
            ClientSocket.Shutdown(SocketShutdown.Both)
            MessageBox.Show("Verbinden gesloten.")
            ClientSocket.Close()
            MessageBox.Show("Socket vernietigd.")
        Catch
        End Try
        Return returnvalue
    End Function
p.s. nameTo() functies zijn voor mezelf, zodat ik de selectie lijst makkelijk kan veranderen (indien ik van IP wissel. of nieuwe servers maak.)
p.p.s. zie nu pas dat er een speler was genaamt "HiImStupid"...

EDIT: antwoord gevonden via 'n vriend en de aardige mensen op de helpmij chat...
ClientSocket.ReceiveTimeout = '--tijd in milliseconden
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan