关于iPhone上的Socket Streams的问题

时间:2009-03-28 08:55:06

标签: iphone objective-c sockets stream

我想将UIImage发送到带有套接字的服务器。我正在使用ADC中的代码:


- (IBAction)searchForSite:(id)sender

{

    NSString *urlStr = [sender stringValue];

    if (![urlStr isEqualToString:@""]) {

        [searchField setEnabled:NO];

        NSURL *website = [NSURL URLWithString:urlStr];

        if (!website) {

            NSLog(@"%@ is not a valid URL");

            return;

        }

        NSHost *host = [NSHost hostWithName:[website host]];

        // oStream is instance variable

        [NSStream getStreamsToHost:host port:80 inputStream:nil
            outputStream:&oStream];

        [oStream retain];

        [oStream setDelegate:self];

        [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]

            forMode:NSDefaultRunLoopMode];

        [oStream open];

    }

}

第一个问题:我想创建一个NSOutputStream对象,但我发现它只能用文件,缓冲区或内存来启动。我怎样才能将流输出到套接字呢?

第二个问题:ADC的参考告诉我们方法getStreamsToHost:port:inputStream:outputStream:将表示输出流的对象返回给远程主机。主机如何将输出流返回给自己?我在哪里可以在代码中添加输出流以发送到主机

1 个答案:

答案 0 :(得分:2)

第一个问题

已经使用套接字初始化它。 NSStream的getStreamsToHost消息已经为您提供了一个套接字,可以与指定的主机进行通信。无论何时想要写入套接字,只需使用 oStream

第二个问题

在第一个问题中回答了一些问题。请记住,您正在打开一个端口 80 的套接字。因此,您可能正在远程主机上运行WebServer。为了能够将图像发送到远程服务器,您需要实现 HTTP 协议。检查下面的建议。我认为它会让你的生活更轻松。


一点建议:

我知道你没有问这个问题,但是让我给你一个建议。您正尝试通过套接字发送图像。我会使用更高级别的协议,例如 HTTP FTP 来执行此操作。使用普通套接字将迫使您自己实现新协议,更不用说处理传入图像的服务器端代码了。

所以,如果您使用 HTTP ,只需在您喜欢的WEB开发平台(.NET,PHP,Java,Python,RoR,CGI等)中编写一个小的服务器端脚本,然后使用指南在this WebPage上提交iPhone上的图像。这样更容易。