- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
免责声明:我是 Xcode/iPhone SDK Noob。
我正在尝试与现有服务器建立客户端 TCP/IP 连接。连接后,我希望收到一些有关服务器的数据(版本等)。
建立连接后,会触发 NSStreamEventOpenCompleted
事件,因此我知道连接已建立。接下来,NSStreamEventHasBytesAvailable
事件触发,我正在执行以下代码。值 71 (int) 存储在 len 中,我认为这是正确的。然而,该行
[data appendBytes:&buffer length:len];
正在崩溃(我认为)。没有抛出实际的错误,但我确实看到 __TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__
即使我已经明确添加了错误捕获:
case NSStreamEventHasBytesAvailable:
{
NSMutableData *data=[[NSMutableData alloc] init];
uint8_t *buffer[1024];
unsigned int len=0;
len=[(NSInputStream *)stream read:buffer maxLength:1024];
if(len>0){
@try{
[data appendBytes:&buffer length:len];
}
@catch(NSException *ex){
NSLog(@"Fail: %@", ex);
}
[statusLabel setText:[data stringValue]];
//[bytesRead setIntValue:[bytesRead intValue]+len];
}else{
NSLog(@"No Buffer");
}
break ;
}
最佳答案
这是 C 级别的问题:您对缓冲区和指针感到困惑。
这段代码:
uint8_t *buffer[1024];
为您提供了一个包含 1024 个指向 uint8_t 的指针的堆栈缓冲区,这几乎肯定不是您想要的。相反:
uint8_t buffer[1024];
稍后,您将堆栈上指针的地址传递给 -[NSMutableDataappendBytes:length:],这又不是您想要的:如 the documentation 所示,传递第一个元素:
[data appendBytes:buffer length:len];
有一个very thorough programming guide包含您想要执行的操作的完整代码,您可能需要引用它。
至于 __TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__
,内存损坏和错误的指针取消引用不是 Objective-C @try
/@catch
所能捕获的>;这是低得多的水平。另一方面,如果您打开调试,您仍然可以在调试器中捕获此内容。
关于iPhone SDK - NSStreamEventHasBytesAvailable/appendBytes : crashing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738213/
免责声明:我是 Xcode/iPhone SDK Noob。 我正在尝试与现有服务器建立客户端 TCP/IP 连接。连接后,我希望收到一些有关服务器的数据(版本等)。 建立连接后,会触发 NSStre
我已经在 iPhone 和 Mac 之间设置了 Bonjour 网络。 用户在 Mac 中呈现的表格中选择 iPhone 的网络服务,并在两侧创建并打开一对流。 iPhone 首先向 Mac 发送代码
我正在编写一个使用 NSStream 与用 Python 编写的服务器通信的消息传递应用程序。该服务器与配套的 Python 客户端完美配合。但是当我用 NSStream 连接到它时,NSInputS
我是一名优秀的程序员,十分优秀!