1

我正在尝试使用流对象(输入/输出)与服务器通信。但我不确定我是否做得很好,或者我是否必须适应我已经做过的事情。

目前,在每个需要与我的服务器通信的视图中,我正在使用这种方法打开一个连接:

- (void)initNetworkCommunication {
  CFReadStreamRef readStream;
  CFWriteStreamRef writeStream;
  CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)kServerIp, kServerPort, &readStream, &writeStream);
  inputStream = (__bridge NSInputStream *)readStream;
  outputStream = (__bridge NSOutputStream *)writeStream;

  [inputStream setDelegate:self];
  [outputStream setDelegate:self];

  [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
  [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

  [inputStream open];
  [outputStream open];
}

而且我不知道这是否是正确的方法(我很确定不是)。我也在使用 JSON 与我的服务器进行通信(我也不知道这样做是否是最好的方法,如果它不让我知道的话)

所以我想知道你们是否可以教我使用流对象的正确方法:) 我发现这篇文章 Manage sockets in iOS with uitabbarcontroller但我真的不明白我要做什么。

ps 我正在使用流对我的数据库进行查询,即:app -> giveMeMyNews -> server -> yourNews -> app -> Display。很简单,但又因为我对 iPhone 开发很陌生,所以我不知道我是否做得对:(

4

1 回答 1

1

流正在工作,因此您可以拥有输入流或输出流。当流能够接受要发送的字节或接收到的新字节可用时,流会发送一个委托方法。

看看我的 Bonjour 文章,我是如何实现 stream:handleEvent: 方法的,这应该可以搞清楚: http: //www.cocoanetics.com/2012/11/bonjour/

最后,如果您希望通过 WiFi 在 iOS 和/或 Mac 设备之间进行通信,我编写了 DTBonjour,它极大地简化了对象的发送。您连接并发送 NSObject,它们会自动编码为 plist 或 json,而接收者将其作为解码对象获取。http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/

至少我相信我的代码足够清晰,可以帮助你理解这个过程。

于 2012-12-16T11:35:53.563 回答