我有一个通过 TCP/IP 使用 linux C 服务器设置的 iOS 客户端。我面临的问题是:连接完成后,服务器等待数据(读取())并在从 iPod 接收到数据后将其呈现在屏幕上。然后它再次回到 read() 等等。我可以读/写一次,但不能永久。代码是:
-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
case NSStreamEventHasSpaceAvailable:
event = @"NSStreamEventHasSpaceAvailable";
connectButton.enabled = NO;
disconnectButton.enabled = YES;
if (theStream == oStream)
{
//send data
uint8_t buffer[11] = "I send this";
int len;
len = [oStream write:buffer maxLength:sizeof(buffer)];
if (len > 0)
{
NSLog(@"Data sent");
[oStream close];
}
}
break;
好的。所以据我所知,一旦在服务器端进行读取,此方法和案例将自动运行。这在服务器上的第一次 read() 调用中效果很好,但在第二次调用中,服务器只是挂在那里等待一些数据。我在 xcode 中的日志显示了会发生什么:
2011-06-17 16:23:50.154 sliderFinal[7430:207] >> : NSStreamEventOpenCompleted //其中一个流已打开
2011-06-17 16:23:50.156 sliderFinal[7430:207] << : NSStreamEventOpenCompleted //另一个流已打开
2011-06-17 16:23:50.157 sliderFinal[7430:207] Data sent //从服务器第一次 read() 后发送的数据
2011-06-17 16:23:50.159 sliderFinal[7430:207] << : NSStreamEventHasSpaceAvailable //这是指来自服务器的第一个 read() 调用
我看到在第一轮之后,服务器一直在等待一些东西。这条消息似乎没有再次到达 NSStreamEventHasSpaceAvailable。有任何想法吗?