【问题标题】:ios asyncsocket cannot call readdata methodios asyncsocket 无法调用 readdata 方法
【发布时间】: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],我现在可以读取数据了。

标签: ios objective-c asyncsocket


【解决方案1】:

发现问题。 我替换:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多