当使用GCDAsyncSocket发送长文本字符串时,在接收端多次调用readDataWithTimeOut,但接收到的数据不一致,即接收到相同的文本,但NSData不同。造成这种差异的可能原因是什么?请让我知道,因为我对GCDAsyncSocket知之甚少。
- (void)writeData:(NSData *)data {
[self.asyncSocket writeData:data withTimeout:-1 tag:1];
}
#pragma mark - GCDAsyncSocket Delegate Methods -
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {
[[NSNotificationCenter defaultCenter] postNotificationName:KSOCKET_MANAGER_REMOVAL
object:self
userInfo:nil];
}
- (void)socketDidCloseReadStream:(GCDAsyncSocket *)sock {
}
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {
}
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
DDLogInfo(@"SOCKET DID READ DATA:%@:%@",self.asyncSocket,self.contactJID);
[sock readDataWithTimeout:-1 tag:0];
if (data!=nil)
[self loadMessageWithData:data];
}
#pragma mark - Private Methods -
- (void)loadMessageWithData:(NSData *)encryptedData {
NSLog(@"DATA RECEIVED");
}发布于 2015-06-05 02:59:44
使用这个
socket.readDataToData(getNsData(), withTimeout: -1, tag: 1)而不是
socket.readDataWithTimeout(1, tag: 0)使用的函数-
private func getNsData()-> NSData{
return NSData(bytes: "#####", length: 5)
}并要求服务器人员在响应的末尾附加此"#####“
//本地套接字连接到远程套接字
func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16)
{
println("Connected to \(host) on port \(p).")
socket.readDataToData(getNsData(), withTimeout: -1, tag: 2)
}
//Some message from remote socket
func socket(socket : GCDAsyncSocket, didReadData data:NSData, withTag tag:UInt16)
{
var response = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
let stringLength = count(response) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - count("#####")
var servResWithoutHash = response.substringToIndex(advance(response.startIndex, substringIndex))
println("Updated response \(servResWithoutHash)")
if let action = getTheCommand(servResWithoutHash){
println("COMMAND == \(action)")
socket.readDataToData(getNsData(), withTimeout: -1, tag: 2)
}
//Notifies when socket gets disconnected
func socketDidDisconnect(sock: GCDAsyncSocket!, withError err: NSError!) {
println("Socket did disconnect with error \(err?.description)");
}https://stackoverflow.com/questions/30372510
复制相似问题