我想通过套接字将UIImage发送到服务器.
a)我打开输出流:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
b)在打开完成后我将NSData写入outputstream并在发生错误时处理错误.
- (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode
{
//printf("EVENT: Start.\n");
switch(eventCode)
{
case NSStreamEventOpenCompleted:
{
//printf("EVENT: Open completed.\n");
if(stream == oStream)
{
//printf("Sending...\n");
NSData *data = UIImageJPEGRepresentation(drawImage.image, 90);
NSInteger x = [oStream write:[data bytes] maxLength:[data length]];
}
break;
}
case NSStreamEventEndEncountered:
{
//printf("EVENT: End encountered.\n"); …Run Code Online (Sandbox Code Playgroud) 我正在开发iPhone应用程序并希望使用:
CFStreamCreatePairWithSocketToHost(NULL, url, port, &serverReadStream, &serverWriteStream);
Run Code Online (Sandbox Code Playgroud)
之后使用:
[serverWriteStream write:[sendData bytes] maxLength:[sendData length]];
Run Code Online (Sandbox Code Playgroud)
我想发送5个字节的小包以获得实时更新.
我现在的问题是,流只在缓冲区已满时才发送数据.所以我需要某种刷新方法或告诉流立即发送数据.
搜索这个问题最终发现'TCP_NODELAY'似乎属于未记录的API(我不能用于AppStore,如果我错了请纠正我),即使我可能被允许使用它,我也必须改变流的创建,对吧?