相关疑难解决方法(0)

如何使用NSOutputStream的写消息?

我想通过套接字将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)

sockets cocoa objective-c stream

6
推荐指数
1
解决办法
3万
查看次数

NSOutputStream刷新

我正在开发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,如果我错了请纠正我),即使我可能被允许使用它,我也必须改变流的创建,对吧?

flush nsstream

3
推荐指数
1
解决办法
4469
查看次数

标签 统计

cocoa ×1

flush ×1

nsstream ×1

objective-c ×1

sockets ×1

stream ×1