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 方法的主要内容,如果未能解决你的问题,请参考以下文章