【问题标题】:Question about Socket Streams on iPhone关于 iPhone 上的 Socket Streams 的问题
【发布时间】:2010-10-16 02:27:15
【问题描述】:

我想通过套接字将 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: 将表示输出流的对象返回到远程主机。主机如何将输出流返回给自己?我在哪里可以在代码中添加输出流以发送到主机

【问题讨论】:

    标签: iphone objective-c sockets stream


    【解决方案1】:

    第一个问题

    正在使用 socket 对其进行初始化。 NSStream 的 getStreamsToHost 消息已经为您提供了一个与指定主机通信的套接字,post。每当您想写入套接字时,只需使用 oStream

    第二个问题

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


    一点建议:

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

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

    【讨论】:

    • 何时可以将 UIImage 数据添加到 oStream?在 [oStream open] 之后还是在 'getStreamToHost' 之前?
    • 它是在之后。但请记住,如果您将其发送到 80 端口,您可能会将其发送到 Web 服务器。所以你必须自己实现 HTTP 协议。请仔细阅读我的回答。如果您遵循我的建议,您将能够传输您的图像。
    • 对于我自己的应用程序,使用端口 1100。它与一个窗口移动应用程序共享同一个服务器。所以我不会被允许更改协议。无论如何感谢您的回答和建议。
    • 如果您的应用程序使用端口 1100,您应该更改这部分代码以反映它:[NSStream getStreamsToHost:host port:80 inputStream:nil outputStream:&oStream];
    • 这不适用于 iOS。 NSHost 仅适用于 Mac。
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多