2012-10-06 7 views
0

winsock을 사용하여 소켓을 통해 데이터를 보내려고합니다. 내 데이터 (실제로 char 배열) 일부 0이 포함될 수 있지만 char 0x00 null 문자를 나타내는 및 모든 문자가 종료 문자를 나타내는대로 잘리는 문제가 발생했습니다. 누구든지이 문제를 해결해야하는 방법에 대한 아이디어가 있습니까? 어떤 대안을 사용할 수 있습니까?0x00 문자가있는 C++ 데이터 배열

내가 원하는 것은 정수, 문자 배열 또는 다른 것을 나타낼 수있는 winsock이있는 바이트를 보내는 것입니다. 수신부가 올바르게 읽을 것입니다.하지만이 게시물의 관심사는 아닙니다.

+5

그러나'send' 계열의 함수는 NUL char을 마침표로 사용하지 않습니다. 대신 그들은 보낼 문자 수를받습니다. 그래서 당신의 문제는 단순히 존재하지 않습니다! – rodrigo

+0

그래도 C++ char 배열은 null 문자 다음에 오는 모든 것을 잘라 버릴 것입니다! – user1628526

+5

아니요! 이것은 char 배열이 _strings_으로 보여 질 때만 발생합니다. 함수에 달려 있습니다 (개별 문서를보십시오). 예를 들어'strcpy/strcmp'는 NUL char을 사용하고 반면에'memcpy/memcmp'는 NUL char을 사용합니다. 그리고 분명히, winsock'send' 함수는 바이트 버퍼를 문자열로 취급하지 않습니다. – rodrigo

답변

1

난 당신이 이런 일을 할 수 있다고 생각 : `

문자의 [100];

//들과

보내기 물건을 수행 ((들), 플래그 나 strlen 양말, S,); `

strlen은 NULL (0)을 찾을 때까지 얼마나 많은 캐릭터가 있는지 계산하여 문자열의 길이를 찾습니다.

0

데이터 스트림의 처음 두 바이트를 전송할 버퍼의 길이로 설정하십시오. 그런 다음 많은 바이트를 보냅니다.

두 개의 바이트를 읽으면 정확히 몇 바이트가 나오는지 알 수 있습니다.

이 문제를 해결할 수 있습니다.

Google 네트워크 바이트 순서입니다. 몇 가지 편리한 함수 호출이있어서 이식성을 쉽게 만듭니다.