【发布时间】: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