Avatar billede noxiaz Nybegynder
17. marts 2007 - 14:10 Der er 5 kommentarer og
1 løsning

Server connection

Hej jeg har scriptet:
public void cmdcsconnect(string sn, string cmd)
    {

        if (cIni.Readini(sn, "status").ToLower() == "online")
        {
            try
            {
                string cip = cIni.Readini(sn, "ip");
                int cport = Convert.ToInt32(cIni.Readini(sn, "port"));
                string crcon = cIni.Readini(sn, "rcon");
                Console.WriteLine("1");
                UdpClient server = new UdpClient(cip, cport);
                Console.WriteLine("2");
                IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                Console.WriteLine("3");
                byte[] data = new byte[1024];
                string challenge;
                string stringData;
                data = Encoding.Default.GetBytes("ÿÿÿÿchallenge rcon");
                server.Send(data, data.Length);
                Console.WriteLine("4");
                data = server.Receive(ref sender);
                int i;
                for (i = 0; i < data.Length; i++) { if (data[i] == 0) { data[i] = 254; } }
                stringData = System.Text.Encoding.Default.GetString(data, 0, data.Length);
                string[] ch = gettok(stringData, 3, 32).Split();
                Console.WriteLine("5");
                challenge = "ÿÿÿÿrcon " + ch[0] + " \"" + csrcon + "\" ";
                data = Encoding.Default.GetBytes(challenge + " " + cmd);
                Console.WriteLine("6");
                server.Send(data, data.Length);
                server.Close();
            }
            catch
            {
                cIni.Writeini(sn, "status", "offline");
            }
        }
    }

Scriptet i sig selv funger helt fint. Jeg har nogen CS servere som jeg har købt online, hvor jeg så bruge dette script til at sende commands med. Men problemmet er at hvis serveren bliver lukket fra producentens hjemmeside, så går scriptet istå. Jeg prøvede at sætte "console.writeline();" ind for at se hvor den gik i stå, og det gør den ved nummer 4. Så tænkte jeg, kan jo smide en try { } rundt om og catch hvis den slår fejl. men det funger heller ikke. scriptet går bare helt istå ved
"data = server.Receive(ref sender);"

Hvordan kan jeg fixe dette problem?
Avatar billede Syska Mester
17. marts 2007 - 14:42 #1
Indeholder "server" ikke en property som fortæller om der også er data og modtage?
noget ala:
if(server.IsData)
{
server.Recieve();
}

kun en ide ...
Avatar billede noxiaz Nybegynder
17. marts 2007 - 14:50 #2
Har prøvet tjekke det, men det gør den ikke lige :/
Avatar billede Syska Mester
17. marts 2007 - 15:36 #3
Så har jeg sq ikke lige nogen ideer ...

// ouT
Avatar billede kalp Novice
17. marts 2007 - 15:41 #4
noxiaz >> du skal nok benytte BeginRecieve() ... så vil dit program godt nok stadig havne i catch blokken men prøve at recieve igen og igen til serveren er oppe.
Avatar billede noxiaz Nybegynder
18. marts 2007 - 12:59 #5
qawi, jeg vil ikke have den til at stå og vente til serveren komme op. Jeg vil bare have den til at stoppe hvis serveren ikke er online.
Avatar billede noxiaz Nybegynder
18. marts 2007 - 14:37 #6
Løste slev problemet: server.Client.ReceiveTimeout = 1000;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester