ios asyncsocket 无法调用 readdata 方法

Posted

技术标签:

【中文标题】ios asyncsocket 无法调用 readdata 方法【英文标题】:ios asyncsocket cannot call readdata method 【发布时间】:2015-03-16 02:33:07 【问题描述】:

我使用asyncsocket创建了一个socket客户端,可以在服务端获取连接和数据,但是客户端获取不到数据,说明onSocket:didReadData方法没有被调用。

-(void) connectToServer

    NSError *err;
    [self.sock connectToHost:[[NSUserDefaults standardUserDefaults] objectForKey:@"ip"] onPort:[[[NSUserDefaults standardUserDefaults] valueForKey:@"port"] intValue] error:&err];

-(void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port

    NSLog(@"connect to host");
    NSData *sockdata = [@"test data\r\n" dataUsingEncoding: NSUTF8StringEncoding];
    [self.sock  writeData:sockdata withTimeout:-1 tag:1];

-(void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag

    NSLog(@"write data finish");//this works good
    [sock readDataToData:nil withTimeout:100 tag:1];

-(void) onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag//this cannot get called

    NSLog(@"read data !");

【问题讨论】:

服务器是否向您的客户端发送了任何数据?您是否在其协议- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err; 中实现该方法并得到任何错误? 不,我没有收到任何错误,并且发现了问题。我将 [sock readDataToData:nil withTimeout:100 tag:1] 替换为 [sock readDataToData:[AsyncSocket CRLFData] withTimeout:100 tag:1],我现在可以读取数据了。 【参考方案1】:

发现问题。 我替换:

[sock readDataToData:nil withTimeout:100 tag:1];

[sock readDataToData:[AsyncSocket CRLFData]  withTimeout:100 tag:1];

现在我可以读取正确的数据了。

【讨论】:

以上是关于ios asyncsocket 无法调用 readdata 方法的主要内容,如果未能解决你的问题,请参考以下文章

iOS--(转)socket编程之Asyncsocket详解

AsyncSocket中tag參数的用处

AsyncSocket WHOIS 连接

AsyncSocket 不调用委托

asyncsocket ipad没有连接到服务器[关闭]

AsyncSocket 委托方法调用不正确?