【发布时间】:2010-10-17 07:15:39
【问题描述】:
我想通过socket将一个UIImage的数据发送给服务器,所以我:
a) 打开 NSOutputStream
- (IBAction)send:(id)sender {
NSURL *website = [NSURL URLWithString:str_IP];
NSHost *host = [NSHost hostWithName:[website host]];
[NSStream getStreamsToHost:host port:1100 inputStream:nil outputStream:&oStream];
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
}
b) 在空间可用时将数据写入 oStream
- (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode
{
switch(eventCode)
{
case NSStreamEventHasSpaceAvailable:
{
if(stream == oStream)
{
NSData *data = UIImageJPEGRepresentation(drawImage.image, 90);
//Convert from host to network endianness
uint32_t length = (uint32_t)htonl([data length]);
[oStream write:(uint8_t *)&length maxLength:4];
[oStream write:[data bytes] maxLength:length];
}
}
break;
}
问题是数据不断地一次又一次地写入 oSream。发送完所有数据如何停止?
我在 Image 数据之前发送数据的长度,以便让服务器知道它何时到达末尾。我是否必须更改服务器端的代码才能在套接字结束时关闭它?我在哪里可以添加 [oStream close] 来关闭客户端的 oStream?
【问题讨论】:
标签: objective-c cocoa sockets stream