2013-09-29 2 views
1

TCP 소켓에 16 진수 문자열을 보내려고합니다. 이 문자열의 형식이나 변환에 몇 가지 문제가 있습니다. 왜냐하면 어떤 형식을 사용하는지 잘 모르겠습니다.C# TCP 소켓에 16 진 문자열 보내기

소켓 클래스를 기반으로 잘 작동하는 WindowsPhone 앱을 작성했습니다. 이 앱은 데스크톱 프로그램에서 웹 서비스를 호스팅하는 기기로 전송되는 요청을 에뮬레이트합니다.

비아 wireshark를 통해, 나는 webservice가 입력 스트림을 받아 들일 것이며 (16 진수로 생각 함) 2를 반환한다는 것을 알았습니다. 필요한 데이터가 들어있는 16 진수 스트림.

그래서 데스크톱 응용 프로그램은 스트림 을 전송하고 Wireshark를 보여줍니다 때

데이터 (8 바이트) 데이터 : 62ff03fff00574600 길이 :이 스트림을 재생하기 위해 많이 노력했습니다 이제 8

. 나는 UTF8 문자열이었고이 스트림을이 형식으로 변환했습니다. 하지만 내가 보낼 때마다, 다음 출력을 Wireshark에서 볼 수 있습니다. 62c3bf03c3bf00574600

나는 62 = b를 조사했지만 ff는 항상 c3bf를 보냈습니다.

누군가이 스트림을 올바른 형식으로 보내는 방법을 알고 있습니까?

건배, 조

+0

데이터를 보내는 방법과 방법, 응답으로 얻고 자하는 것, 결과물을 나타내는 코드 표현을 보여줄 수 있습니까? – Rezoan

+0

코드는 여기의 M $ 샘플과 거의 똑같습니다.[링크] (http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202858 (v = v105) .aspx) – user2828101

+0

데이터를 16 진수로 변환 한 후 다음과 같이 사용했습니다. 문자열 : bÿÿ 따라서 formating이 작동하는 것처럼 보입니다. 그렇다면 ... result = client.Send (sendString); 여기서 sendString은 비어 있습니다. 이 예제의 send 메서드는 string에서 payload로 copnversion을 수행합니다. 여기서 payload는 바이트 배열입니다 (byte [] payload = Encoding.UTF8.GetBytes (data)). 그러면 소켓 연결을 통해 장치로 전송됩니다. 그러나 문제는 wireshark에서 데이터를 분석 할 때 이러한 0x00ff가 ÿ으로 변환되지 않고 c3bf로 변환된다는 것입니다. 어떤 생각? – user2828101

답변

0

소켓 전송 신경 안, TCP 패킷의 내용은 "어떤"나타내는 이진입니다. 당신이 코멘트에 가리키는 코드에서 :

byte[] payload = Encoding.UTF8.GetBytes(data); 
socketEventArg.SetBuffer(payload, 0, payload.Length); 
... 
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); 
response = response.Trim('\0'); 

소켓 전송의 끝에서가/(데이터 == 응답)를받을 수 있습니다. 문제가 발생하지 않으면 문제가 어디에서 발생하는지 파악해야합니다. 그 다음 출력 '인코딩'배열가가가 전송되고있는 패킷 데이터에 포함되어 있는지 확인하십시오 수, 작동하는 경우 다음

string source = "your problem text string"; 
byte[] encode = Encoding.UTF8.GetBytes(source); 
target = Encoding.UTF8.GetString(encode, 0, encode.Length); 
Debug.Assert(source == target); 

: 첫 번째 단계는 지금과 같은 몇 가지 매우 간단한 코드를 작성하는 것입니다 수신중인 내용인지 확인하십시오. 올바른 데이터를 보내지 만 손상된 데이터를받는다면 심각한 문제가 발생할 수 있습니다 ... 그렇다면 동일한 머신 (로컬 호스트)에서 반복적인지 확인하기 위해 매우 간단한 테스트 프로그램을 작성하십시오.

내가 인코딩해야하는 문자가 유니 코드가 아니거나 Win Phone이 올바르게 지원하지 않는다고 생각해야한다면 (Proper unicode support).

+0

도움을 주셔서 감사합니다. 서버가 문제가되지 않습니다. 요청을 처리하지만 데이터를 보내면 올바르지 않습니다. 내가 응용 프로그램을 디버깅 할 때 페이로드가 기다리는 데이터를 보유하고있는 데이터 배열을 가져 오지만 prob가 여전히 남아 있다는 것을 알 수 있습니다. 62ff 03ff를 보냈지 만 'Encoding.Unicode.GetBytes'로 0062 00ff 0003 00ff를 보냈습니다. (데이터)'. 따라서 결국 서버는 요청을 이해하지 못하고 응답은 ERR1이 절대적으로 정상입니다. 내 응용 프로그램은이 응답을 받고 그것을 보여줍니다. 그래서 OK. – user2828101

0

서버가 예상하는 프로토콜/인코딩을 모르는 한 질문에 제공 한 바이트와 같은 알려진 메시지 만 재생할 수 있습니다.

byte[] payload = new byte[] {0x62, 0xff, 0x03, 0xff, 0xf0, 0x05, 0x74, 0x60}; 

및 이전에 인코딩 된 문자열처럼 소켓으로 보내 :

그러므로 당신은 단지 바이트 배열과 같이 직접 정의 할 수 있습니다. 이제 서버는 스니핑 한 클라이언트가 보낸 것처럼 메시지를 수락해야합니다.