none
UWP: TCP StreamSocket funktioniert nur mit Visual Studio RRS feed

  • Frage

  • Hallo zusammen,

    ich entwickele momentan eine Software, welche unter anderem Daten über TCP (Localhost) an ein anderes Programm schickt. Dafür verwende ich ein Windows.Networking.Sockets.StreamSocket, welches bei mir auf dem PC auch gut funktioniert. Bei meinem Kollegen hat dies nicht funktioniert, auch das Installieren des Windows 10 SDKs hat nichts gebracht. Erst als er ebenfalls Visual Studio mit der UWP-Entwicklungsumgebung installiert hatte, ging es. Dafür muss Visual Studio noch nicht einmal gestartet werden.

    Habt ihr eine Idee, woran das liegen könnte? Fehlen noch irgendwelche Libraries?

    Wir wollen die Software auch für andere Nutzer bereitstellen, dabei ist das Installieren von Visual Studio natürlich keine Option...

    Viele Grüße

    Max

    Montag, 30. Dezember 2019 17:12

Antworten

Alle Antworten

  • Hallo Max,

    hast Du den im Package.appxmanifest unter Funktionen die option Private Netzwerke (Client und Server) aktiviert?

    Wenn ja, kannst Du ein Beispiel Projekt z.B. auf Github bereitstellen das man sich anschauen kann?

    Montag, 30. Dezember 2019 17:29
  • Vielen Dank für die Antwort!

    Das hatte ich ganz vergessen zu schreiben, alle relevanten Funktionen sind aktiviert!

    Ich denke, der folgende Code sollte ausreichen:

    public async Task<bool> SendCommand(string message)
            {
                try
                {
                    using (var streamSocket = new Windows.Networking.Sockets.StreamSocket())
                    {
                        var hostName = new Windows.Networking.HostName("localhost");
    
                        await streamSocket.ConnectAsync(hostName, "9000");
    
                        using (Stream outputStream = streamSocket.OutputStream.AsStreamForWrite())
                        {
                            using (var streamWriter = new StreamWriter(outputStream))
                            {
                                await streamWriter.WriteLineAsync(message);
                                await streamWriter.FlushAsync();
                            }
                        }
                    }
    
                    return true;
                }
                catch (Exception ex)
                {
                    Windows.Networking.Sockets.SocketErrorStatus webErrorStatus = Windows.Networking.Sockets.SocketError.GetStatus(ex.GetBaseException().HResult);
                    return false;
                }
            }

    Das komische ist ja, dass es problemlos funktioniert, wenn Visual Studio installiert ist...
    • Bearbeitet DrummerMax Montag, 30. Dezember 2019 17:36
    Montag, 30. Dezember 2019 17:35
  • Ich werde einen kleinen test machen und melde mich wieder. Wahrscheinlich aber erst morgen

    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Montag, 30. Dezember 2019 17:52
  • Was ich auch noch nicht wusste ist das man im Standard mit UWP nicht den eigenen Host kontaktieren darf. Sobald man aber VS installiert wirde diese sperre aufgehoben.

    Schau dir dazu die folgenden Links an Kommunikation mit localhost (Loopback)

    UWP Enable local network loopback


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    • Als Antwort markiert DrummerMax Dienstag, 31. Dezember 2019 14:32
    • Tag als Antwort aufgehoben DrummerMax Mittwoch, 1. Januar 2020 15:27
    Dienstag, 31. Dezember 2019 01:15
  • ...darauf muss man auch erstmal kommen!

    Vielen Dank für das Herausfinden! :-)

    Dienstag, 31. Dezember 2019 14:32
  • Leider hilft das dort angegebene Kommando 

    checknetisolation loopbackexempt -a -n=<package family name>

    nichts. Den Package Name habe ich mit und ohne Anführungsstriche angegeben, das "checknetisolation" mit und ohne ".exe". Das Tool gibt zwar "OK" zurück, doch der Localhost geht noch immer nicht, auch nicht nach einem Neustart.

    Hast du oder jemand anders noch irgendeine Idee? Die Security Policy von UWP gefällt mir echt gar nicht...

    Viele Grüße und ein frohes neues Jahr!

    Mittwoch, 1. Januar 2020 15:31
  • Hallo allerseits, habe leider ein ähnliches Problem mit meiner App und würde mich hier gerne anschließen. Bin für jeden Tipp dankbar :)

    LG
    Julian

    Mittwoch, 1. Januar 2020 15:32
  • Das kann ich nicht bestätigen

    Nach dem Aufruf von (als Admin)

    checknetisolation loopbackexempt -a -n="35640TWyTec.bv24.at_8e2hdjak06jkr"

    Dies ist in meinem fall der Paketfamilienname. Dieser Name entspricht auch dem Installationsordner unter C:\Users\wycic\AppData\Local\Packages

    Funktioniert das


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings


    Mittwoch, 1. Januar 2020 16:40
  • Vielen Dank!

    Ich hatte den Paketnamen verwendet (war ähnlich kryptisch, habe ich jetzt geändert), nicht den Paketfamiliennamen. Jetzt geht es! DANKE!

    Mittwoch, 1. Januar 2020 17:32