问题标签 [nsoutputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3740 浏览

objective-c - 通过 NSOutputStream 发送 UIImage

我正在尝试将用户拍摄的图像发送到服务器。我得到 JPEG 表示,将其附加到上传照片所需的字符串,然后通过 NSOutputStream 发送数据。但是,当我尝试从服务器取回照片时,我只能从顶部看到 10% 的照片。任何帮助,将不胜感激。

顺便提一句。套接字已打开并已连接。

这是我的代码:

0 投票
1 回答
2176 浏览

ios - EASession 的 NSOutputStream 停止向 EAAccessory 发送数据

我有一个项目,它连接到外部附件并与 iOS 应用程序进行少量数据通信。我能够像苹果在他们的 EADemo 参考代码中那样设置会话和流,并且一切似乎都运行良好。

我遇到的问题是,在使用该应用程序的随机时间后,输出流停止工作,但输入流仍然运行良好。我在每次写入尝试之前检查以确保 hasSpaceAvailable 为真,当我读回写入的字节数时,一切看起来都是正确的。此外,查看运行循环并不表示工作和非工作之间有任何区别,并且流状态仍然显示为打开。

我能看到的唯一导致这种情况的原因是我的附件没有连续确认应用程序的一些写入尝试,然后它就中断了。

我怎样才能检测到我处于这种状态,我该如何解决?

0 投票
1 回答
2211 浏览

ios - iOS: outputStream does not stay open

Okay so I'm implementing a NSOutput and Input Streams. When they are initialized, the streams open and connect to my TCPServer I have running on my PC, but then appear to close once outside of the initializing function or maybe the streams aren't being stored properly. I'm not quite sure so any assistance is greatly appreciated

In my .h file:

In my .m file:

In the initNetworkConnection the simulator connects to my TCPServer and opens a connection(streamstatus = 2). Receives the message "Hello from Ipad Simulator". But then I have the "sendaResponse" method called from a button click which then streamstatus = 0 and "outputstream" doesn't appear to be initialized. Am I just not retaining the variable properly?

0 投票
2 回答
430 浏览

ios - 如何从 appdelegate 共享 NSOutputStream?

我从应用程序启动连接到服务器时在 appdelegate 中设置了套接字连接。在 appdelegate.h

然后在 appdelegate.m 中设置连接到服务器:

应用启动时运行良好。沟通也很好。

然后我有一个标签控制器。每个选项卡都需要通过此套接字与服务器交换数据。我不想为每个选项卡创建不同的套接字。

如何使用相同的输出流/输入流?

我在 firstviewcontroall.m 中尝试了这个但失败了:

没有数据发送到服务器。我不想在每个视图控制器上创建一个到服务器的套接字。太浪费资源了。我的问题是如何通过一个套接字连接发送/接收数据?

0 投票
1 回答
3779 浏览

ios - iOS:用于大文件下载的 NSFileHandle 与 NSOutputStream

在 iOS 上,我们的应用程序正在下载一个大约 400MB 的 zip 文件。下载文件时,我们遇到了间歇性崩溃。

目前我正在使用 [NSFileHandle writeData:] 来写入数据,而不是存储在内存中。但我想知道操作系统是否以某种方式将其存储在内存中?

NSOutputStream 会是下载大文件的更好解决方案吗?或者可能是标准的unix文件描述符?

我们的文件句柄是这样设置的:

目前我的 NSURLConnection 委托方法如下所示:

因此,来自请求的数据不会存储或附加到任何其他数据对象。这不应该只是写入磁盘而不影响内存吗?

谢谢

0 投票
0 回答
361 浏览

iphone - 无法从 iPhone 上的 whois 服务器获得回复

我一直在尝试对 iPhone 上的 whois 服务器执行 whois 查询。我尝试使用 CFSocket,但放弃了它并尝试使用流来实现。代码:

看来,我的消息已发送,但我没有得到服务器的回复。尝试了几个服务器,但结果是一样的。为什么是这样?我是否发送错误消息,我是否接受错误?它应该适用于流,因为我在 Java 中尝试过同样的方法并且它有效。

请有人帮助我:(

编辑:

例如,我有一些 Java 代码,效果很好:

Objective-c 中的代码与这个非常相似,但它不起作用。为什么?

0 投票
1 回答
1461 浏览

sockets - NSInputStream can't read from TCP Connection [TCP-Server]

I created a TCP server using this (quite old) example by Apple. My server is up and running, listening on the specified Port for incoming connections.

Everything looks perfect, my client app can connect to the server and -stream:handleEvent: is called as expected.

But when I now write to the stream, the server kind of rejects my connection. The client says that 30 Bytes has been written successfully.

But my logs say:

In the client side I'm using following code to establish the connection:

On the server side this creates the socket (a CFSocketCallBack is provided)

Then in the callback I'm pairing using this:

And then bridge cast the streams to NSStreams, set the delegate, schedule in in current runloop and open them.

I'm not quite sure why this can happen so I don't provide the whole server code here. It would be simply too much.

When you need a specific piece of code or guess where it could be caused, I'll post the respective code here.

UPDATE

I now did a lot of research in my own code. I tracked the issue down to my -stream:handleEvent method invocation.

UPDATE 2

I read this great Apple Article about TCP Servers and clients. I walked through all the steps and my program is almost identical with the code provided by Apple. The problem remains.

0 投票
0 回答
413 浏览

objective-c - NSOutput Stream Write 操作在后台模式下通过轮询和运行循环调度失败 iOS 6

我有一个使用外部访问框架的应用程序。我遵循了 Apple 提供的名为 EADemo 的示例。我正在通过轮询机制写入输出流,它在 iOS 5 之前工作正常。当我使用 iOS 6 进行测试并等待 HasSpaceAvailable 时,它​​总是返回一个 NO。从这里的讨论 http://discussions.apple.com/message/21161460#21161460我尝试将当前运行循环更改为主运行循环,但仍然没有成功。

我发布了一些代码来给出一个想法:

我在 EADemo 代码中使用的 write 方法。

我必须支持前台和后台的数据传输。我看到数据传输发生在前台,但在后台失败。我看到该应用程序在 iOS 5 之前运行良好,但是当我尝试在 iOS 6 设备上进行测试时它失败了。有没有人有解决方案?

0 投票
1 回答
1474 浏览

ios - NSOutputStream 没有调用委托的 NSStreamEventHasSpaceAvailable

我已经通过使用输入和输出流实现了套接字。外部架构负责一次发送一个请求以进行写入。

但是,如果任何请求没有返回 noHasBytesAvailable我需要从队列中删除该请求并通知请求超时。

对于所有其他请求,我能够正确发送/接收数据,但如果任何一个请求超时,那么之后就HasSpaceAvailable永远不会被调用。

我的代码如下:

@implementation CCCommandSocket

@synthesize 连接超时定时器;@synthesize requestTimeoutTimer;

/* * init * * @params * ipAddress :摄像头socket的ip地址 * portNumber :摄像头socket的端口地址 * * @return * Socket类型的对象,它将向ipAddress,portNumber发送连接请求 * */ - (id)初始化 { self = [超级初始化]; if (self) { ip = @"192.168.42.1"; 端口 = 7878;

}

语用标记-

pragma 建立套接字通信。

/* * connectToCamera * */ - (void) connectToCamera { NSString *urlStr = ip;

}

语用标记 -

杂注获取方法

/* * getIP * * @return * 套接字连接的IP地址 */ -(NSString *) getIP { return ip; }

/* * getPort * * @return * 套接字连接的端口号 */ -(int) getPort { return port; }

语用标记-

pragma 处理套接字回调。

  • (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {

    NSMutableArray *array = [[NSMutableArray alloc] init]; [数组添加对象:流];[数组 addObject:[NSNumber numberWithInt:eventCode]];

    [self performSelectorInBackground:@selector(myStream:) withObject:array]; }

  • (void)myStream:(NSMutableArray*) array { NSNumber *number = [array objectAtIndex:1]; int eventCode = [number intValue];

    switch(eventCode) { case NSStreamEventErrorOccurred: { CCLog(LOG_ERROR, @"In Command Socket NSStreamEventErrorOccurred"); //[自我断开]; //[[ErrorDetails getInstance] reportError:NSStreamEventErrorOccurred]; 休息; }

    } }

/* * 执行 * * @param * 请求:通过套接字发送到相机的命令 * * @return * 响应:从相机接收到的响应 * */ -(NSString *) executeRequest :(NSString *)request { CCLog(LOG_INFO, @"命令套接字执行请求");

}

语用标记-

pragma 处理连接超时

// 启动连接时调用它 - (void)startConnectionTimeoutTimer { [self stopConnectionTimeoutTimer]; // 或者确保在调用此方法之前停止任何现有的计时器

}

  • (void)handleConnectionTimeout { responseString = @"{ \"rval\": -103}"; CCLog(LOG_RESPONSE, responseString);

    [自我 removeRequestFromQueue];

    [自我disconnectWithNotification:是];[self stopConnectionTimeoutTimer]; }

// 启动连接时调用它 - (void)startRequestTimeoutTimer { [self stopRequestTimeoutTimer]; // 或者确保在调用此方法之前停止任何现有的计时器

}

  • (void)handleRequestTimeout { responseString = @"{ \"rval\": -103}"; CCLog(LOG_RESPONSE, responseString);

    [自我连接相机]; [self stopRequestTimeoutTimer]; [自我 removeRequestFromQueue]; }

// 成功连接后调用 - (void)stopRequestTimeoutTimer { if (requestTimeoutTimer) { [requestTimeoutTimer invalidate]; requestTimeoutTimer = nil; } }

-(void) disconnectWithNotification:(BOOL)showNotification { CCLog(LOG_INFO, @"Socket Disconnected"); [输入流关闭]; [inputStream setDelegate:nil]; [inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 输入流 = 零;

}

// 成功连接后调用 - (void)stopConnectionTimeoutTimer { if (connectionTimeoutTimer) { [connectionTimeoutTimer invalidate]; 连接超时定时器 = 无;} if (requestTimeoutTimer) { [requestTimeoutTimer 无效]; requestTimeoutTimer = nil; } }

-(void) handleCommandPortDataReceived { [互斥锁]; [self stopRequestTimeoutTimer]; @try { 长尺寸 = 1024; uint8_t buf[大小];无符号整数长度 = 0;

}

-(void) removeRequestFromQueue { //从队列中移除 requestString = nil;

}

@结尾

0 投票
0 回答
373 浏览

objective-c - 将数据写入多个文件的快速方法 - Objective-C OSX

目前,我正在使用以下代码连续创建/写入数据到约 30,000 个文件:

您可以猜到,运行 30k 个文件需要相当长的时间。但是,我想知道是否有一种方法可以提高效率。我看过 NSOutputStream - 这是一个可行的选择吗?还是我总是受到系统将数据写入文件的速度的限制?