2017-09-22 12 views
1

TcpListener을 사용하여 수신 메시지를 읽으려고합니다. 나는 청취자를 설치하고 메시지를 받는다. 그러나 그 메시지는 매우 이상합니다. 나는이납니다 :C# TcpListener가 메시지에 이상한 문자를 수신했습니다.

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

메시지는 HTTPS를 통해 다른 응용 프로그램 (나는이 응용 프로그램의 소스 코드가없는)로부터 전송합니다 (HTTPS는 문제가 그것을 할 수 있다는 점이다?). 어쨌든 내가 설정 한 청취자는 다음과 같습니다.

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; 
} 

메시지는 유효한 xml 트리 여야합니다. C# 및 .NET Framework 4.5.2를 사용하고 있습니다. 정확히 내가 뭘 잘못하고 있니?

+2

응용 프로그램이 HTTPS 요청을 보내는 경우 왜 TcpListener를 사용하고 있습니까? – CodeCaster

+2

https가 암호화되어 있습니다. ** 사용자가 직접 구현하지 않기를 바랍니다 **. –

+0

@CodeCaster Tbh ​​저는 HTTPS에 익숙하지 않습니다. TcpListener 대신 무엇을 권하고 싶습니까? – Therk

답변

0

의견에 따르면 OSI 모델에서 낮은 수준의 데이터를 얻으려는 것으로 보입니다. TcpClient를 사용하는 대신 HttpClient를 사용하여 청취중인 응용 프로그램에서 데이터를 가져올 수 있습니다.

서버의 종류와 요청 처리 방법에 따라 달라 지지만

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

또 다른 해결책은 기존 TCP 연결에서 StreamReader를 사용하는 것입니다. 그 예가 아래 질문에 나와 있습니다. 솔루션은 실제로 서버에 따라 다릅니다. 그런 다음 웹 서비스 클라이언트를 사용하여 SOAP/XML을 사용하는 웹 서비스를 호출하는 경우

How reading messages from Server? (tcp)

0

System.Net을 사용

(시각적 스튜디오 프로젝트에 웹 참조를 추가). Http.HttpClient 또는 System.Net.WebClient를 사용하여 웹 서버에서 XML 파일을 다운로드하십시오.

TCP 클라이언트를 사용하여 암호화 된 웹 트래픽을 시도하고 디코딩하지 마십시오.