Tag: nsstream

什么是iOS的等同于Android的Socket编程代码?

我在Android(Java)中有一些套接字编程代码,我想在iOS(Objective-C)中实现相同的function。 在iOS上, NSStream , NSInputStream , NSOutputStream是套接字编程的一些类。 在将它们与Android的SocketChannel类中的某些方法进行比较时,我有些怀疑。 socketChannel.configureBlocking socketChannel.setSoTimeout socketChannel.connect socketChannel.finishConnect socketChannel.isConnected NSStream , NSInputStream等iOS类中的等效方法是什么? Android上的ByteBuffer也有一个position()方法。 什么是在iOS中的等效方法? 我知道NSStream常量在那里,但是我们对如何映射到Android代码感到困惑。 你能否build议哪些方法在iOS中是相同的?

NSURLSession使用绑定stream上传后台文件

历史: 我正在研究一个我们需要支持的项目: 背景使用NSURLSession上传文件。 服务器期望使用Content-Type: multipart/form-data上传文件 以前,我正在使用NSURLConnection绑定一对Streams,如本Apple示例所示 。 现在,我希望通过使用uploadTaskWithStreamedRequest : NSURLSession(Background Session)类似的方法。 我写了一个小的独立iOS样本+一个PHP服务器来validation我的概念。 问题:如果应用程序停留在前台,一切正常,但如果在上传过程中按Home键,一段时间后上传失败,出现错误: 域= NSURLErrorDomain代码= -997“丢失连接到后台传输服务” 在上传失败之前, NSStreamEventEndEncountered遇到写/生成器stream的NSStreamEventEndEncountered 。 注意:我知道可以将整个HTTP Post主体写入临时文件的解决方法,并使用NSURLSession'sfile uploadAPI。 但是,如果我可以做到这一点,以上更合适。 问题:有谁能猜到上传失败的可能原因是什么? 示例代码:我已经上传了iOS示例代码+ PHP服务器代码到下拉框。 这是代码 谢谢!

NSTimer没有及时解雇

我试图连接到一个给定的IP地址端口。 一个问题是当build立一个不存在IP地址的连接时,write命令(如下): NSData * imageRequest = [@"640" dataUsingEncoding: NSUTF8StringEncoding]; int image = [self.outputImageStream write:[imageRequest bytes] maxLength:[imageRequest length]]; 它需要超过75秒的回应。 我尝试通过下面的方法调用来启动一个计时器: self.connectionTimeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(respondToTimer:)userInfo:nil repeats:NO]; 它在我定义的1秒间隔内没有被调用。 有什么办法可以确保定时器在1秒内发射?

一个开放的,但不活跃的,在主线程上调度的NSStream可以移动到不同的线程?

我正在使用(而且需要使用)我没有源代码的第三方框架。 第三方框架处理创build一个authentication的客户端/服务器连接,并交回一对开放的NSStreams。 我所面临的挑战是在主线程上安排NSStreams(创buildUI可能无响应的情况 – 我想避免这种情况)。 在stream从第三方框架中被移交的时候,没有networkingstream量正在进行。 所以,我想知道是否可以不计划和重新安排NSStreams。 有谁知道是否有可能取消调度一个开放的NSStream并重新安排在另一个线程上的另一个运行循环? 会造成问题吗? 那里有代码示例吗? 提前致谢! 亚伦

正在调用read:maxLength:每个NSStreamEventHasBytesAvailable都正确一次?

来自Stream Programming Guide的示例代码: – (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventHasBytesAvailable: { if(!_data) { _data = [[NSMutableData data] retain]; } uint8_t buf[1024]; unsigned int len = 0; len = [(NSInputStream *)stream read:buf maxLength:1024]; if(len) { [_data appendBytes:(const void *)buf length:len]; // bytesRead is an instance variable of type NSNumber. [bytesRead setIntValue:[bytesRead intValue]+len]; } else […]

NSStream – 反向DNS查找错误

我必须打开一个NSStream到只有一个数字地址,而不是一个名字的WiFi接入点。 它需要NSStream 30-40秒来打开一个套接字。 在实验中,我发现telnet到一个窗口框的AP是瞬时的,但在Mac上,连接相同的30-40秒。 在研究telnet的时候,我发现这个实现在mac上有点不一样,因为默认情况下会尝试进行名称查找。 阅读手册页的telnet,我发现:-N防止IP地址名称查找当目标主机被给予作为IP地址。 当我使用“telnet -N IP地址端口”,我的连接瞬间! 我怀疑这同样的问题导致我的NSStream连接延迟。 有没有什么办法可以在NSStream中设置“-N”标志?

使用部分缓冲区将多字节Unicode字节数组转换为NSString

在Objective C中,有一种将多字节Unicode字节数组转换为NSString的方法,即使数组数据是部分缓冲区(不是完整的字符边界),也可以使转换成功。 这个应用程序在接收stream中的字节缓冲区时,要分析数据缓冲区的string版本(但是会有更多的数据来,并且缓冲区数据没有完整的多字节Unicode)。 NSString的initWithData:encoding:方法不适用于此目的,如下所示… testing代码: – (void)test { char myArray[] = {'f', 'o', 'o', (char) 0xc3, (char) 0x97, 'b', 'a', 'r'}; size_t sizeOfMyArray = sizeof(myArray); [self dump:myArray sizeOfMyArray:sizeOfMyArray]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 1]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 2]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 3]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 4]; [self dump:myArray sizeOfMyArray:sizeOfMyArray – 5]; } – […]

如何使用NSInputStream和NSOutputStream

我正试图在iPhone之间创build一个简单的多人回合制游戏。 现在我想要做的就是将一些string传递给我的方法,并让方法通过NSOutputStream发送string。 我想我已经使用NSNetServiceBrowser正确连接了我的NSNetServiceBrowser 。 一旦他们连接,我的NSNetServiceDelegate有netService:didAcceptConnectionWithInputStream:outputStream:叫,这应该给我我的I / O NSStream对。 我的方法如下所示: -(void)netService:(NSNetService *)sender didAcceptConnectionWithInputStream:(NSInputStream *)inputStream outputStream:(NSOutputStream *)outputStream{ [self.myNet getInputStream:&inputStream outputStream:&outputStream]; self.inStream = inputStream; self.outStream = outputStream; [self.inStream setDelegate:self]; [self.inStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [self.inStream open]; } 我想我已经正确设置了NSInputStream。 我也有一个NSStream实现stream:handleEvent:的委托stream:handleEvent: 它看起来像这样: -(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{ NSInputStream *inStream = (NSInputStream *)aStream; BOOL shouldClose = NO; switch(eventCode) { case NSStreamEventEndEncountered: shouldClose = YES; […]

将传入的NSStream转换为视图

我正在成功发送一个NSData的stream。 下面的委托方法是获取该stream并附加到NSMutableData self.data。 如何获取这些数据,并将其制作成一个UIView / AVCaptureVideoPreviewLayer(应该显示video)? 我觉得我错过了另一个转换,AVCaptureSession> NSStream> MCSession> NSStream>? – (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { switch(eventCode) { case NSStreamEventHasBytesAvailable: { if(!self.data) { self.data = [NSMutableData data]; } uint8_t buf[1024]; unsigned int len = 0; len = [(NSInputStream *)stream read:buf maxLength:1024]; if(len) { [self.data appendBytes:(const void *)buf length:len]; } else { NSLog(@"no buffer!"); } // Code […]

NSStream在iPhone上不能正常工作

func connect(host: String, port: Int) { self.host = host self.port = port NSStream.getStreamsToHostWithName(host, port: port, inputStream: &inputStream, outputStream: &outputStream) if inputStream != nil && outputStream != nil { // Set delegate inputStream!.delegate = self outputStream!.delegate = self // Schedule inputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode) outputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode) // Open! inputStream!.open() outputStream!.open() } } 当我在XCode Simulator中的代码开始的时候,它可以工作,但是当我在iPhone上启动它时,它给了我下面的错误: 终止应用程序由于未捕获的exception“NSInvalidArgumentException”,原因:“+ [NSStream […]