在对接某音乐协议时,遇到的问题,其中音乐协议参考:Java-解决音乐协议中的Socket通信字节传输问题。
首先,需要读取\r\n前的Header,需要使用:
[_dataSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:DATA_HEADER];
不能直接使用:
[_dataSocket readDataWithTimeout:-1 tag:DATA_HEADER];
否则与后面读取字节流混杂使用时,会出现数据读取错乱:
[_dataSocket readDataToLength:length withTimeout:-1 tag:DATA_CONTENT];
完整代码:
1 | - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag |