2011-08-30 2 views
0

소켓 연결을 통해 문자열 메시지를 수신하고 관련 파일 핸들에서 바이트를 수신 할 때 문자열을 만듭니다.CFSocket을 통해 FileHandle에서 NSData로 분리 된 문자열 메시지 읽기

[NSString stringWithCString:[data bytes] encoding:NSASCIIStringEncoding] 

지금이 종류의 작품은 괜찮지 만, 나는이 문자열들을 올바르게 기록하기 위해 노력하지만 대부분 시간이 걸리지 만 가비지 문자가 생깁니다. 나는 위와 같은 utf8bytes와 ascii로 시도했다. (메시지는 ascii이다.)

은이 같은 통지를 통해 데이터를 수신하고 있습니다 :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveData:) name:NSFileHandleDataAvailableNotification object:fileHandle]; 
[fileHandle waitForDataInBackgroundAndNotify]; 

내가 메시지 증가의 부하되면, 망가 문자열 부분이 로그에 표시한다고 가정. 메시지 자체는 깨끗하고 엄격하게 영숫자입니다 (플러스는 구분 기호 @ ";"와 점).

이상한 문자열 부분은 메시지와 아무 관계가 없으며 소켓을 사용하여 읽는 것이 잘못되었습니다. 데이터?

어떤 도움을 주실 수 있나요?

답변

1

아마도 데이터를 변환하는 방식으로 데이터를 정리하고있을 것입니다. 완벽한 C 스타일 문자열 경계에서 데이터가 전달되는 것은 아닙니다. stringWithCString을 호출하면 null 문자까지 전달 된 각 데이터 버퍼를 읽은 다음 남은 바이트를 삭제합니다. 변환을 수행하기 전에 모든 데이터 버퍼를 축적해야합니다.

+0

빠른 응답을 주셔서 감사합니다. 하지만 텍스트가 더 많거나 적게 연속적으로 들어오는 경우 언제 변환을 수행하는 것이 안전합니까? 데이터를 버퍼에 넣고 항상 다음 구분자까지 스캔 할 수 있지만 어쩌면 당신은 어떻게 나에게 힌트를 줄 수 있습니까? 이것을 접근하십시오. 스캐너가 문자열을 스캔하므로 변환 문제가 다시 발생합니다. 맞습니까? 문자에 대한 데이터 문자를 조사해야합니까? – DasAntonym

+0

좋아, 나는 이것을 결국 통과 할거라 생각한다. 위와 같은 내용을 잊어 버리는 것은 제 전환에 문제가 있습니다. 도와 주셔서 감사합니다! – DasAntonym

관련 문제