我想将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:将表示输出流的对象返回给远程主机。主机如何将输出流返回给自己?我在哪里可以在代码中添加输出流以发送到主机
答案 0 :(得分:2)
第一个问题:
已经使用套接字初始化它。 NSStream的getStreamsToHost消息已经为您提供了一个套接字,可以与指定的主机进行通信。无论何时想要写入套接字,只需使用 oStream 。
第二个问题:
在第一个问题中回答了一些问题。请记住,您正在打开一个端口 80 的套接字。因此,您可能正在远程主机上运行WebServer。为了能够将图像发送到远程服务器,您需要实现 HTTP 协议。检查下面的建议。我认为它会让你的生活更轻松。
一点建议:
我知道你没有问这个问题,但是让我给你一个建议。您正尝试通过套接字发送图像。我会使用更高级别的协议,例如 HTTP 或 FTP 来执行此操作。使用普通套接字将迫使您自己实现新协议,更不用说处理传入图像的服务器端代码了。
所以,如果您使用 HTTP ,只需在您喜欢的WEB开发平台(.NET,PHP,Java,Python,RoR,CGI等)中编写一个小的服务器端脚本,然后使用指南在this WebPage上提交iPhone上的图像。这样更容易。