Autor Beitrag
falcoperegrinus
Hält's aus hier
Beiträge: 3

WIN 7, Ubuntu 10.04
VS 2010 Ultimate
BeitragVerfasst: Fr 13.05.11 10:26 
Ich bekomme von einem Datenlogger UDP-Frames zugesendet. Diese soll ich empfangen und in einem OPC-UA Server bereitstellen. Dazu habe ich mir erstmal ein kleines
Programm geschrieben das die UDP-Frames empfängt, verarbeitet und die Daten auf der Konsole ausgibt. Das funktioniert auch einwandfrei.
Hier mal der Code dazu:
ausblenden C#-Quelltext
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:
private const int listenPort = 19460;

        private static void StartListener()
        {
            IPAddress ip = IPAddress.Parse("192.168.0.105");
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint endPoint = new IPEndPoint(ip, listenPort);
            ...
            try
            {
                while (true)
                {
                    ...
                    byte[] bytes = listener.Receive(ref endPoint);
                    ...Daten verarbeiten
                            Console.WriteLine(" Empfangen von {0}: {1}; {2}; {3}", endPoint.ToString(), name, type, floatValue);
                    
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);                
            }
            finally
            {
                listener.Close();
            }
        }


Jetzt habe ich versucht die Methode in meinem Server zu integrieren. Der Thread in dem die UDP-Frames empfangen werden sollen, startet auch, aber empfängt dann keine UDP-Frames.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
public void ReceiveNewValues()
        {
            
                Thread thread = new Thread(UdpThread);
                thread.IsBackground = true;
                thread.Start();
        }
        
        private void UdpThread()
        {
            Hashtable valueList = new Hashtable();
            while (true)
            {
                valueList = SocketMessagingUdpReceiver.ParseUdpFrame();
                ...
            }
        }


ausblenden volle Höhe C#-Quelltext
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:
class SocketMessagingUdpReceiver
    {
        private const int listenPort = 19460;


        public static Hashtable ParseUdpFrame()
        {
            byte[] bytes = ReceiveUdpFrame();
           ...

        private static byte[] ReceiveUdpFrame()
        {
            IPAddress ip = IPAddress.Parse("192.168.0.105");
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint endPoint = new IPEndPoint(ip, listenPort);
            byte[] bytes;
                                  
            try
            {
                Console.WriteLine("Kurz vorm empfangen");
                bytes = listener.Receive(ref endPoint);
                Console.WriteLine("empfangen");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                bytes = null;
            }
            finally
            {
                listener.Close();
            }
            return bytes;
        }

Mein Problem ist nun, dass "Kurz vorm empfangen" noch ausgegeben wird, "empfangen" jedoch nicht mehr. D.h. listener.Receive empfängt nichts. Im Debugger bleibt das Byte-Array null...
Sieht jemand einen Fehler bzw. kann mir jemand sagen, in welche Richtung ich denken muss?
falcoperegrinus Threadstarter
Hält's aus hier
Beiträge: 3

WIN 7, Ubuntu 10.04
VS 2010 Ultimate
BeitragVerfasst: Di 17.05.11 16:50 
Niemand da der einen Fehler sieht? Oder mir einen Denkanstoß geben kann? Ich weiß einfach nicht weiter in welche Richtung ich da suchen soll...