【问题标题】:How do I read data using CocoaAsyncSocket?如何使用 CocoaAsyncSocket 读取数据?
【发布时间】:2012-06-09 18:57:09
【问题描述】:

我在我的 appDelegate didFinishLaunchingWithOptions 方法中创建了一个 TCP Socket 连接。这很容易,我已经成功连接到我的服务器。在我的视图中从服务器读取数据时遇到很大困难。我一直在阅读有关如何使用 CocoaAsyncSocket 适当(逐步)读取数据的教程,但我没有遇到任何有用的东西。

这是我的 appDelegate 中的代码:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    socket = [[AsyncSocket alloc] initWithDelegate:self];
    [self connect];

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[tekMatrixViewController alloc] initWithNibName:@"tekMatrixViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
} 

这是我的连接方法,在 appDelegate 文件的底部:

- (void)connect 
{
    [socket connectToHost:@"9.5.3.3" onPort:11005 error:nil];
}

这是最简单的部分。我现在需要从服务器读取数据。我知道需要创建某种 NSDataNSMutableData 对象来获取我从服务器读取的数据的值。我只是在找到任何指导我正确方向的教程或文档方面非常不成功。有几种不同的读取功能,一些具有不同的参数,等等。如果有人能指出我深入研究这个的资源*(我是一个新手,毕竟 =P)* 我真的很感激 - 或者如果有人知道实现此目标的简单方法,并且不介意在此处提供示例代码:D

这是我正在使用的库:CocoaAsyncSocket。我正在使用库 AsyncSocket.hAsyncSocket.m

我已经被困在这几个小时了,所以任何帮助都将不胜感激。

谢谢!

【问题讨论】:

标签: iphone ios sockets cocoaasyncsocket


【解决方案1】:

这应该可行:

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];
    NSString *msg = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
    if(msg)
    {
        NSLog(@"RX:%@",msg);
    }
}

你还应该实现一些其他的委托方法,例如:

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
    NSLog(@"error - disconnecting");
    //you'd probably want to start reconnecting procedure here...
}

- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{
    NSLog(@"disconnected");
}

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
    NSLog(@"connected");
}

编辑:如果我没记错的话,图书馆有一些文档和一些示例。

【讨论】:

  • 非常感谢您的快速回复。我还是个新手,一直很难掌握委托方法的概念。你介意给我一个简单的解释吗?我习惯于在 C/C++ 中定义方法并在准备好使用它时简单地调用它(即 myMethod();)。出于某种原因,我还没有提到委托方法——更重要的是它们是如何被调用的。非常感谢!!
  • 这就是为什么 SO 在这里的原因 :) 我现在有点着急,这不是一个容易解释的话题。亚历克斯·罗赞斯基(Alex Rozanski)就这个话题发布了很好的答案here。还要检查他在答案中链接的文档。
  • 明白。我将查看其他答案。非常感谢:)
  • rokjarc 很好的解释。我有一个问题,在我的应用程序中没有调用 didReadData 方法。请帮我解决问题所在。我成功写入数据并将其发送到服务器,但无法读取服务器发送的数据。
  • @Birju:如果没有看到实际的实现/代码,即使不是不可能,也很难说。首先的猜测是:a)委托回调方法名称中的拼写错误; b)委托在实际接收到数据之前被解除分配——它是作为某个方法内的局部变量分配的吗? c) 服务器端错误:数据实际上不是从服务器发送的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多