建立到流媒体服务器和iphone的套接字连接

建立到流媒体服务器和iphone的套接字连接,iphone,sockets,streaming,Iphone,Sockets,Streaming,我想与流媒体服务器建立套接字连接(使用iphone),并想将其内容(如图像、.css等)下载到iphone。任何想法或示例代码都可以帮助我。我只需要为客户端编写代码。按如下方式建立连接,并将urlStr更改为您的服务器URL NSString *urlStr = @"http://192.168.0.108"; NSURL *website = [NSURL URLWithString:urlStr]; CFReadStreamRef readStream; CFWrit

我想与流媒体服务器建立套接字连接(使用iphone),并想将其内容(如图像、.css等)下载到iphone。任何想法或示例代码都可以帮助我。我只需要为客户端编写代码。

按如下方式建立连接,并将urlStr更改为您的服务器URL

NSString *urlStr = @"http://192.168.0.108"; NSURL *website = [NSURL URLWithString:urlStr]; CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)[website host], 1234, &readStream, &writeStream); NSInputStream *inputStream = (NSInputStream *)readStream; NSOutputStream *outputStream = (NSOutputStream *)writeStream; [inputStream setDelegate:self]; [outputStream setDelegate:self]; [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [inputStream open]; [outputStream open]; NSString*urlStr=@”http://192.168.0.108"; NSURL*网站=[NSURL URLWithString:urlStr]; CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL,(CFStringRef)[网站主机]、1234、&readStream、&writeStream); NSInputStream*inputStream=(NSInputStream*)readStream; NSOutputStream*outputStream=(NSOutputStream*)writeStream; [inputStream setDelegate:self]; [outputStream setDelegate:self]; [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode]; [outputStream ScheduleRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode]; [输入流打开]; [输出流打开]; 使用NSStream委托读取数据,如下所示

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventHasBytesAvailable: { NSLog(@"Bytes Available"); uint8_t b[1024]; unsigned int len = 0; NSMutableData *data = [[NSMutableData alloc] init]; len = [(NSInputStream *)stream read:b maxLength:1024]; if(!len) { if ([stream streamStatus] != NSStreamStatusAtEnd) { } } else { [data appendBytes:(const void *)b length:len]; int bytesRead; bytesRead += len; //make use of data here } } break; } } -(void)流:(NSStream*)流句柄事件:(NSStreamEvent)事件代码{ 开关(事件代码){ 案例NSTRAVENTHASBYTES可用: { NSLog(@“可用字节”); uint8_t b[1024]; 无符号整数len=0; NSMutableData*数据=[[NSMutableData alloc]init]; len=[(NSInputStream*)流读取:b最大长度:1024]; 如果(!len){ 如果([streamStatus]!=NSStreamStatusEnd) { } }否则{ [data appendBytes:(const void*)b长度:len]; int字节读取; 字节读取+=len; //利用这里的数据 } } 打破 } }
我使用的代码有一些细微的变化:

NSHost *host = [NSHost hostWithName:[website host]];
        [NSStream getStreamsToHost:host 
                      port:8766 
                       inputStream:iStream
                      outputStream:oStream];
而不是

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)[website host], 1234, &readStream, &writeStream);
    NSInputStream *inputStream = (NSInputStream *)readStream;
    NSOutputStream *outputStream = (NSOutputStream *)writeStream;

什么样的流媒体服务器?HTTP?RTMP?还有别的吗?谢谢,我已经按照你的建议用过了。但我如何知道连接已成功建立。我编写了这个方法-“(void)stream:(NSStream*)stream handleEvent:(NSStreamEvent)eventCode”,但在执行时没有调用它。我在接口中声明了NSStreamDelegate。请建议.in.h文件使用协议,在[inputStream setDelegate:self]行中放置断点;如果inputStream和outputStream不等于“nil”,则表明连接已建立。要测试应用程序,请将一些数据写入服务器端的套接字。如果streams为nil,则表示您使用的url错误,服务器已关闭。请确保服务器端和客户端的端口号相同,