我正在尝试使用流对象(输入/输出)与服务器通信。 但我不确定我是否做得很好,或者我是否必须调整我已经做过的事情。
目前在每个需要与我的服务器通信的 View 中,我正在使用此方法打开连接:
- (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但我真的不明白我必须做什么。
附注我正在使用流对我的数据库进行查询,即:app -> giveMeMyNews -> server -> yourNews -> app -> Display。非常简单,但由于我是 iPhone 开发的新手,所以我不知道我这样做是否正确:(
最佳答案
Streams 正在工作,因此您可以拥有输入流或输出流。当流能够接受您要发送的字节或接收到的新字节可用时,它会发送委托(delegate)方法。
看看我的 Bonjour writeup 我是如何实现 stream:handleEvent: 方法的,这应该可以解决问题:http://www.cocoanetics.com/2012/11/bonjour/
最后,如果您希望在 iOS 和/或 Mac 设备之间通过 WiFi 进行通信,我编写了 DTBonjour,它大大简化了对象的发送。您连接并发送 NSObjects,它们会自动编码为 plist 或 json,接收者将其作为解码对象获取。 http://www.cocoanetics.com/2012/11/and-bonjour-to-you-too/
至少我相信我的代码足够清晰,可以帮助您理解这个过程。
关于iphone - 如何正确使用流对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900747/