Korrekte Verwendung von DatagramSocket UDP

Habe ich den folgenden code (Ausschnitte unten) in meine Basis-Klasse für den Umgang mit einem UDP-socket. Ich bin das hinzufügen der Unterstützung für WinRT (gesteuert durch das #define für WINRT). Ich habe alles für .Net, aber etwas ist schief mit meinem WinRT Umsetzung. Wenn ich die Daten senden, nicht empfangen, die auf der server-Seite. Irgendeine Idee was schief läuft? Ich sehe keine Fehler auf der client-Seite, einfach nichts zeigt, bis auf dem server. Ich habe erfolgreich bekommen meine TCP-socket-Klasse zu arbeiten, mit dem data-Writer in einer ähnlichen Weise.

        public UdpSocketClient(IPEndPoint remoteEndPoint, int localPort)
        {
            this.remoteEndPoint = remoteEndPoint;
#if WINRT
            this.socket = new DatagramSocket();
            this.socket.MessageReceived += ReceiveCallback;

            //Bind to any port
            Logger.Debug("{0}: UdpSocketClient created. Binding to port {1}.", this, (localPort == 0) ? "[any]" : localPort.ToString());
            IAsyncAction bindAction = this.socket.BindEndpointAsync(new HostName("localhost"), localPort == 0 ? "0" : localPort.ToString());
            bindAction.AsTask().Wait();
            Logger.Trace("{0}: Bind Complete to port {1}", this, this.socket.Information.LocalServiceName);

            //Get IOutputStream
            Logger.Trace("{0}: Getting output stream to {1}.", this, remoteEndPoint);
            IAsyncOperation<IOutputStream> asyncOutput = this.socket.GetOutputStreamAsync(remoteEndPoint.address, remoteEndPoint.port.ToString());
            asyncOutput.AsTask().Wait();
            Logger.Trace("{0}: Got output stream.", this);

            //Create DataWriter
            dataWriter = new DataWriter(asyncOutput.GetResults());
#else
            ...
#endif
        }


        public void SendBuffer(ByteBuffer buffer, int wait = 0)
        {
#if WINRT
            Logger.Trace("{0}: Sending buffer. Wait = {1}", this, wait);
            for (int i = 0; i < buffer.WriteSize(); i++)
                dataWriter.WriteByte(buffer.Buffer()[i]);
            DataWriterStoreOperation op = dataWriter.StoreAsync();
            if (wait != 0) op.AsTask().Wait(wait);
            else op.AsTask().Wait();
            Logger.Trace("{0}: Sending complete.", this);
#else
        ...
#endif
        }

Einige relevante Protokolle:

04/23 19:08:57.504 DEBUG: Area Sync: UdpSocketClient created. Binding to port [any].
04/23 19:08:57.505 TRACE: Area Sync: Bind Complete to port 59518
04/23 19:08:57.506 TRACE: Area Sync: Getting output stream to 71.227.179.128:1302.
04/23 19:08:57.507 TRACE: Area Sync: Got output stream.

04/23 19:08:57.604 TRACE: Area Sync: Sending contact packet.
04/23 19:08:57.604 TRACE: Area Sync: Sending buffer. Wait = 0
04/23 19:08:57.605 TRACE: Area Sync: Sending complete.
Starten Sie durch mit einem packet sniffer, um zu sehen, ob der client tatsächlich das senden der Pakete auf das Netzwerk.
Ich bin ziemlich sicher, dass es nicht Pakete zu senden. Ich Laufe das gleiche .Net-code und es funktioniert.

InformationsquelleAutor Nick Banks | 2012-04-24

Schreibe einen Kommentar