繁体   English   中英

iPad GCDAsyncSocket无法读取

[英]iPad GCDAsyncSocket doesn't read

我的项目确实需要一些帮助...我需要与用Java编写的服务器交换数据。 我尝试使用GCDAsyncSocket,可以将消息发送到服务器,在服务器上读取它,但是当服务器将响应发送到客户端时,我无法(不知道如何)在客户端上读取它。 这是我的代码的一部分:

- (void) someMethod{
    NSError *err = nil;
    asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    if(![asyncSocket connectToHost:@"localhost" onPort:7777 error:&err]){
        // If there was an error, it's likely something like "already connected" or "no delegate set"
        NSLog(@"I goofed: %@", err);
    }
    NSString *requestStr = @"<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><root><service>1</service><type>1</type><userProperties><username>ivo</username></userProperties></root>";
    NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];

    [asyncSocket writeData:requestData withTimeout:-1.0 tag:0];

    [asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:1.0 tag:0];
    [asyncSocket disconnectAfterWriting];
}

- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
    if (tag == 0)
        NSLog(@"First request sent");
    else if (tag == 2)
        NSLog(@"Second request sent");
}

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",str);
}

请帮助,如果我在绝望中还有另一种愿意尝试的方法...

我看到您正在发送XML,在请求数据的末尾没有特定的终止符,但是您希望服务器发送以\\ r \\ n终止的响应吗?

协议指定了什么?

通过tcp发送和接收数据是造成混乱的常见原因,因为tcp基于流。 它没有单独读/写的概念。 从概念上讲,它将所有数据视为永无止境的流。 该协议规定了消息边界。 有关更好的解释,请参阅GCDAsyncSocket Wiki上的“常见陷阱”文章: https : //github.com/robbiehanson/CocoaAsyncSocket/wiki/CommonPitfalls

我认为这将有助于解释很多。

暂无
暂无

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

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