[C#] Data lezen van UDPClient *

Pagina: 1
Acties:

  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ik ben bezig een tracker te schrijven in C#

Nou heb ik een commando opgestuurd naar de server en krijg hiervan response in de vorm van UDP pakketjes

hier is de opzet van de connectie

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
IPEndPoint OneIp= new IPEndPoint( IPAddress.Parse("***.***.***.***")
,23000);

Socket mysocket= new Socket( OneIp.Address.AddressFamily, 
SocketType.Dgram,ProtocolType.Udp);

mysocket.SetSocketOption(SocketOptionLevel.Socket, 
SocketOptionName.ReceiveTimeout, 1000);

byte[] query= Encoding.ASCII.GetBytes("\\players\\");
mysocket.SendTo( query, query.Length, SocketFlags.None, OneIp);

IPEndPoint SomeSender= new IPEndPoint(IPAddress.Any, 0);
EndPoint tmpRemoteEP= (EndPoint)SomeSender;

byte[] buffer= new byte[1500];

string s;
mysocket.Receive(buffer);
s = Encoding.ASCII.GetString(buffer, 0, buffer.Length);


Omdat de data die teruggestuurd is niet in 1 paket past, moet ik eigelijk nog meer pakketjes ontvangen, alleen ik weet niet hoe ik dat moet aanpakken (misschien moet ik dat vragen aan de server maar daar heb ik geen verdere informatie over gevonden het is een Battlefield1942 server)

Als ik nog een keer het receive commando uitvoer dan krijg ik precies dezelfde data terug.

Heeft iemand misschien een tip

[ Voor 4% gewijzigd door dominion99 op 28-08-2003 17:26 ]


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
in de titel staat date dat moet data, sorry voor de onduidelijkheid

fix0red, en plaats dit soort dingen voortaan in een TR of edit het erbij in je eerste post :)

[ Voor 52% gewijzigd door curry684 op 28-08-2003 18:55 ]


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 09-08 16:24
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class weetiket
{
private  static UdpClient udpClient;
private receive myWorkerThreadHandler;
private ThreadStart myThreadStart;
private Thread myWorkerThread;
public static bool aan = false;

//load method()
{
udpClient = new UdpClient(514);
//probeer receive.Receive() aan te roepen
//in een aparte thread, zodat de window 
//zichtbaar blijft.
myWorkerThreadHandler = new receive();
//instantieer receiv class
myThreadStart = new ThreadStart(myWorkerThreadHandler.Receive);
//nieuwe thread moet bovenstaande method aanroepen
myWorkerThread = new Thread(myThreadStart);
}

//button klik method()
{
aan = !aan;
            if (aan) 
            {   
                if (init)
                //eerste keer dat thread gestart wordt?
                {
                    myWorkerThread.Start(); 
                    //roept Receive.receive aan in een aparte thread
                    textBox1.Text = "Thread started";
                    //info
                    init = false;
                    //thread mag maar 1x worden gestart
                }
                else
                {
                    textBox1.Text = "Thread already started";
                    //info
                }
            }
            else 
            {
                //stop met luisteren
            }
} //end method klik
}//End class weetiket
class receive
        {           
            public void Receive()
            {               
                while (true)
                {   
                    if(!Form1.aan)  
                        //zolang er niet op stop is gedrukt
                        return;
                    else
                    
                    try
                    {                   
                        IPAddress ip = IPAddress.Parse("192.168.10.1");//158");
                        //localhost
                        IPEndPoint remoteIpEndPoint = new IPEndPoint(ip, 514);
                        //endpoint is hier
                        byte[] received = new Byte[256];
                        //byte buffer
                        received = udpClient.Receive(ref remoteIpEndPoint);
                        //luister naar de poort
                        string dataReceived = System.Text.Encoding.ASCII.GetString(received);
                        //vertaal bytes naar string
                        textBox1.Text += dataReceived;  
                        //toont text
                        Thread.Sleep(0);
                        //thread met laagste prioriteit
                    }               
                    catch
                    {
                        textBox1.Text = "Error while receiving";
                        //geeft aan dat er een fout is opgetreden
                    }
                }
            }           
        }


Of iets dergelijks..?

loading...


  • dominion99
  • Registratie: December 2001
  • Laatst online: 13-08-2025
Ik heb het opgelost, niet zo veel code zoals hierboven. Maar toch bedankt voor de moeite.

Er kwamen meerdere pakketjes, het laatste pakketje eindigd met een "final" tekst in de string. Zolang ik die tekst niet tegenkom voer ik een receive uit. En dat werkt.

De code is niet de code die ik als eerste gepost heb, die heb ik maar weggegooid.