【发布时间】:2013-03-19 04:27:52
【问题描述】:
我正在通过this 教程学习 iOS 网络编程。我尝试修改代码,以便在连接成功后立即向服务器发送响应。我更改的代码的唯一部分是在这个函数中。问题是应用程序停止并且[outputStream write:[data bytes] maxLength:[data length]]; 行上没有任何反应,因此NSLog(@"sent test"); 没有被执行。我做错了什么?
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
NSLog(@"stream event %i", streamEvent);
switch (streamEvent) {
case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
//my code
if (theStream == outputStream) {
NSLog(@"outputStream");
NSData* data = [NSData dataWithBytes:@"test" length:4];
[outputStream write:[data bytes] maxLength:[data length]];
NSLog(@"sent test");
} //end my code
break;
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
//...
}
}
break;
case NSStreamEventErrorOccurred:
NSLog(@"Can not connect to the host!");
break;
case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[theStream release];
theStream = nil;
break;
default:
NSLog(@"Unknown event");
}
}
编辑:在此处找到解决方案 How to use NSOutputStream's write message?
【问题讨论】:
-
我不确定这是否是问题,但
NSData* data = [NSData dataWithBytes:@"test" length:4];行不正确。应该是:NSData *data = [@"test" dataUsingEncoding:NSUTF8StringEncoding];. -
感谢您的提示。我试过了,但它并没有解决我的问题。也许您可以下载教程应用程序并添加我的代码 sn-p 并尝试运行它。
-
我不是使用
NSStreams进行套接字编程的专家(坦率地说,我更喜欢原始 BSD 套接字 C API),但根据 Apple's programming guide,您应该将数据写入 @ 987654330@ 事件处理程序,只要您可以将数据写入套接字而不阻塞(您不希望在执行套接字操作时阻塞您的 UI 线程),就会调用该事件处理程序。 -
在 iOS 中通过 NSStream 使用 BSD 套接字有什么缺点吗?
标签: ios objective-c network-programming