首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分读取长文本的GCDAsyncSocket : iOS

部分读取长文本的GCDAsyncSocket : iOS
EN

Stack Overflow用户
提问于 2015-05-21 19:32:18
回答 1查看 991关注 0票数 0

当使用GCDAsyncSocket发送长文本字符串时,在接收端多次调用readDataWithTimeOut,但接收到的数据不一致,即接收到相同的文本,但NSData不同。造成这种差异的可能原因是什么?请让我知道,因为我对GCDAsyncSocket知之甚少。

代码语言:javascript
复制
- (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");
}
EN

回答 1

Stack Overflow用户

发布于 2015-06-05 02:59:44

使用这个

代码语言:javascript
复制
socket.readDataToData(getNsData(), withTimeout: -1, tag: 1)

而不是

代码语言:javascript
复制
socket.readDataWithTimeout(1, tag: 0)

使用的函数-

代码语言:javascript
复制
private func getNsData()-> NSData{
        return NSData(bytes: "#####", length: 5)
    }

并要求服务器人员在响应的末尾附加此"#####“

//本地套接字连接到远程套接字

代码语言:javascript
复制
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)");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30372510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档