gpt4 book ai didi

iPhone SDK - NSStreamEventHasBytesAvailable/appendBytes : crashing

转载 作者:行者123 更新时间:2023-12-03 19:26:57 31 4
gpt4 key购买 nike

免责声明:我是 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com