m J*_*Jae 3 objective-c nsinputstream
我真的想使用getBuffer:length:NSInputStream 的方法.经过大量的研究,我找不到使用这种方法的有效例子,因为大多数人真的需要read: maxLength:.
所以现在关于周围环境的一些事实:*我正在为iPhone开发应用程序,iOS 3.1.3*我已经通过套接字建立了网络通信*网络连接实际上有效; 所以我没有忘记将一个流添加到runloop或一个有效的委托或类似的东西 - 它已经工作*我只是通过网络发送和接收字符串.*我已经设置了一个有效的委托stream: handleEvent:正确(区分收到的事件并采取适当的行动).我不确定接收代码是否100%正确,因为我有时会收到两次消息.这也可能是我正在与之通信的设备上的错误实现.为了弄清楚它是最后一个指向哪一个,我试图找出当我收到"NSStreamEventHasBytesAvailable"事件时接收缓冲区上有多少字节.由于我不确定我的实现是否正确,但我想知道我收到的实际字节数,我想使用getBuffer: length:并查看之后的长度.奇怪的是:长度永远不会在控制台上打印出来
[((NSInputStream *) stream) getBuffer: &buf length: &numBytes]总是评估为FALSE.无论如何,代码的一部分之后正常工作,在缓冲区中接收消息并正确转发 - 工作正常.问题仍然存在:为什么不起作用getBuffer: length:?感兴趣的代码在这里:
`case NSStreamEventHasBytesAvailable:{
uint8_t *buf;
unsigned int numBytes;
if ([((NSInputStream *) stream) getBuffer: &buf length: &numBytes]) {
NSLog(@"\t\tBytes in the buffer: %i", &numBytes);
}
uint8_t buffer[BUFFER_SIZE];
int len = [((NSInputStream *) stream) read: buffer
maxLength: BUFFER_SIZE];
NSLog(@"\tread: %i bytes", len);
/*
if len > 0: len is equal to the filled byte elements
if len == 0: end of buffer was reached while reading
if len < 0: something terrible happened...
*/
if (len > 0) {
/* 1. create string from received byte buffer */
NSString *msg = [[NSString alloc] initWithBytes: buffer length: len encoding: NSASCIIStringEncoding];
NSLog(@"\tcontained message: %@", msg);
/* 2. inform communicator about received message */
[communicator received: msg];
[msg release];
}
if (len < 0) {
[communicator received: @"Error!"];
}
break;
}
Run Code Online (Sandbox Code Playgroud)
`
如果有人可以帮助我会很好!
ste*_*vex 10
达尔文是开源的,所以"真相就在那里".NSStream的源代码显示GSInetInputStream是为套接字实现NSInputStream的类,并且该类的getBuffer:length:的实现简洁地回答了这个问题:
- (BOOL) getBuffer: (uint8_t **)buffer length: (unsigned int *)len
{
return NO;
}
Run Code Online (Sandbox Code Playgroud)
在这里找到.
| 归档时间: |
|
| 查看次数: |
6049 次 |
| 最近记录: |