2017-09-22 5 views
1

Ich versuche eingehende Nachrichten mit einem TcpListener zu lesen. Ich richte einen Zuhörer ein und erhalte eine Nachricht. Aber die Nachricht ist sehr seltsam. Ich erhalte diese:C# TcpListener empfängt merkwürdige Zeichen in Nachricht

▬♥♥¡☺?♥♥YÄÂb­ #ù÷"MDòs←ç→.ge ûjò8┼#i(♥→å:À#À'<À%À)[email protected]À À‼/À♦À♫32À+À/oÀ-À1z¢À↕▬‼ÿ☺:▬¶↨↑↓▬¶♠♥♠☺♣♥♣☺♦♥♦☺♦☻☻♥☻☺☻☻ 

Die Nachricht von einer anderen Anwendung gesendet wird (ich habe nicht den Quellcode dieser Anmeldung) über https (ist es möglich, dass das https das Problem ist?). Wie auch immer, der Listener, den ich eingerichtet habe, sieht wie folgt aus:

static void Main(string[] args) 
{ 
    TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 11000); 
    Console.WriteLine("Listening..."); 
    listener.Start(); 

    TcpClient client = listener.AcceptTcpClient(); 
    Console.WriteLine("Connection accepted."); 

    Thread t = CreateThread(client, false); 
    t.Start(); 
} 

private static Thread CreateThread(TcpClient client) 
{ 
    Thread t = new Thread(delegate() 
    { 
     byte[] data = new byte[300]; 
     client.Client.Receive(data); 
     Console.WriteLine("Received data: "); 

     string value = Encoding.Default.GetString(data); 
     Console.WriteLine(value); 
    }); 

    return t; 
} 

Die Nachricht sollte ein gültiger XML-Baum sein. Ich benutze C# und .NET Framework 4.5.2. Was genau mache ich falsch?

+2

Wenn die Anwendung eine HTTPS-Anforderung sendet, warum verwenden Sie einen TcpListener? – CodeCaster

+2

https ist verschlüsselt, ** Sie wollen nicht ** dies selbst implementieren. –

+0

@CodeCaster Tbh ​​Ich bin nicht sehr vertraut mit HTTPS. Was empfehlen Sie anstelle von TcpListener? – Therk

Antwort

0

Wie die Kommentare gesagt haben, scheint es, dass Sie versuchen, die Daten auf einem niedrigen Niveau auf dem OSI-Modell zu erhalten. Anstatt einen TcpClient zu verwenden, können Sie einen HttpClient verwenden, um die Daten aus der Anwendung zu erhalten, die Sie gerade hören.

Obwohl es hängt davon ab, was Ihr Server ist und wie Anfragen behandelt werden.

var httpClient = new HttpClient(); 
var response = await httpClient.GetAsync(uri); 

Eine andere Lösung ist die Verwendung eines StreamReader auf Ihrer bestehenden TCP-Verbindung, ein Beispiel dafür ist in der folgenden Frage. Obwohl Lösung wirklich davon abhängt, was dein Server es ist.

How reading messages from Server? (tcp)

0

Wenn Sie einen Web-Service aufrufen, die Seife/xml verwendet dann eine Client-Web-Service nutzen (eine Web-Referenz zu Visual Studio-Projekt hinzufügen)

ein System.Net verwenden. Http.HttpClient oder ein System.Net.WebClient zum Herunterladen einer XML-Datei von einem Webserver.

Nein, versuchen Sie nicht verschlüsselten Web-Datenverkehr mit einem TCP-Client zu dekodieren.

Verwandte Themen