繁体   English   中英

从iOS到WebSockets的二进制数据

[英]Binary data from iOS to WebSockets

我正在使用CocoaHTTPServer库并尝试将二进制数据传输到Web套接字。 Web套接字打开成功,可以毫无问题地从iOS接收字符串。 但是,当我尝试通过套接字发送二进制数据时,我得到一个Could not decode a text frame as UTF-8 Chrome中的Could not decode a text frame as UTF-8错误。

有没有人通过网络套接字从iOS成功传输二进制数据? (在我的情况下,这是一个UIImage

CocoaHTTPServer有一个sendData:(NSData *)data方法,我正在使用但没有成功。 当我使用sendMessage:(NSString *)它没有问题(基本上使用UTF-8编码将NSString转换为NSData

所以我用适当的编码/解码解决了它。

据我所知, WebSockets不支持二进制数据传输(虽然我期待它会因为一些教程显示如何,并且他们将ArrayBufferBlob作为二进制传输的有效数据类型,可以使用connection.binaryType='arraybuffer'设置connection.binaryType='arraybuffer' 。也许它是实验性的?)

因此,您需要在传输之前将数据转换为文本数据。

在iOS中,

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

在JS中,

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

在Chrome和Safari中测试过,就像魅力一样

当心编码到base64是很容易但不是必要的正确的解决方案性能,你正在进行不必要的编码和解码处理。 有一个livio是来自CoccoaHTTPServer的一个fork,但是它实现了websocket二进制发送。 我不明白为什么它不是一个plull请求,为什么它不是coccoapod,所以你需要使用Carthage而不是coccoapod。

但截至目前, https://github.com/livio/LivioHTTPServer似乎是答案/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM