2013-07-08 3 views
3

CocoaHTTPServer 라이브러리를 사용 중이며 이진 데이터를 웹 소켓으로 전송하려고합니다. 웹 소켓이 성공적으로 열리고 문제없이 iOS에서 문자열을받을 수 있습니다. 그러나 소켓을 통해 이진 데이터를 보내려고하면 Chrome에서 Could not decode a text frame as UTF-8 오류가 발생합니다.iOS에서 WebSocket으로 이진 데이터

누군가 iOS에서 웹 소켓을 통해 바이너리 데이터를 성공적으로 전송 했습니까? (제 경우에는 UIImage입니다)

CocoaHTTPServer은 제가 사용하고 있지만 성공하지 못했습니다. sendData:(NSData *)data 방법이 있습니다. sendMessage:(NSString *)을 사용하면 문제없이 작동합니다 (본질적으로 NSString을 UTF-8 인코딩을 사용하여 NSData으로 변환 함)

답변

0

그래서 적절한 인코딩/디코딩으로 해결했습니다. 나는 그것이 일부 자습서 방법을 보여줄 것이기 때문에 기대되었지만 내가 알고있는 것처럼

, WebSockets은 (바이너리 데이터 전송을 지원하지 않습니다, 그들은 사용하여 설정할 수 있습니다 바이너리 전송을위한 올바른 데이터 유형으로 ArrayBufferBlob을 이야기 connection.binaryType='arraybuffer' 아마도 아직 실험적일까요?)

따라서 전송하기 전에 데이터를 텍스트 데이터로 변환해야합니다.

connection.onmessage = function(e) { 
    var msg = e.data; 
    var img1 = document.getElementById('img1'); 
    img1.src = 'data:image/jpeg;base64,' + msg; 
} 

가 크롬과 사파리에서 테스트 아이폰 OS에서

, JS에서

WebSocket *socket = ...; // From CocoaHTTPServer 
NSData *image_data = ...; 
NSString *str_64 = [Helper base64ForData:image_data]; // Can be found at http://cocoadev.com/BaseSixtyFour 
[socket sendMessage:str_64]; 

는 마법처럼 작동

0

베이스 64로 인코딩이 쉽지만 필요하지 않을 권리입니다 조심 솔루션 성능 현명한, 당신은 인코딩 및 디코딩의 불필요한 처리를 가하고 있습니다. CoccoaHTTPServer에서 포크 인 livio가 있지만 websocket 바이너리 전송을 구현합니다. 나는 그것이 왜 단순한 요청이 아니며 coccoapod로 단순화되지 않은 이유를 이해하지 못하므로 coccoapod 대신 Carthage를 사용해야합니다. 당신이 질문에 대한 코멘트 나에 대한 하나의 답의 경우 지금 https://github.com/livio/LivioHTTPServer

+0

/해답이 될 것으로 보인다 권리로

그러나 댓글이 아닌 답변을 게시하시기 바랍니다. –