首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSFileHandle发送大量数据

使用NSFileHandle发送大量数据
EN

Stack Overflow用户
提问于 2010-06-28 07:46:23
回答 1查看 1K关注 0票数 0

因此,我使用Apple的PictureSharing/PictureSharingBrowser示例来发送和接收数据。它通过NSFileHandle的writeData方法在服务器端使用NSFileHandle发送图片。

代码语言:javascript
复制
NSFileHandle * incomingConnection = [[aNotification userInfo] objectForKey:NSFileHandleNotificationFileHandleItem];

[[aNotification object] acceptConnectionInBackgroundAndNotify];
[incomingConnection writeData:dataToWrite];
[incomingConnection closeFile];

这似乎可以很好地工作,直到我想发送大量数据(在本例中是1MB的数据)。当我尝试这样做时,应用程序在执行writeData方法时挂起。客户端甚至没有开始读取数据,它只是打开连接,但什么也没有发生。(它应该一块一块地读取数据块,而服务器一次发送所有数据)。

我猜在某个地方发生了一些死锁,但我不确定在哪里。我试着找一个异步者。用NSFileHandle编写数据块的方法,但是我找不到这样的方法。

任何指导都会有帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-02 01:19:20

我基本上漏掉了一步...在NSNetServiceBrowser的netServiceBrowser: didFindService:( moreComing: delegate方法中,我不是简单地尝试连接到每个传入的服务,而是保留服务,为找到的服务设置委托,并尝试解析该服务。

然后,我可以打开一个流到*- (void)netServiceDidResolveAddress:(NSNetService )发送器中解析的服务,这是NSNetservice的委托方法。

代码语言:javascript
复制
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
    [aNetService retain];
    [aNetService setDelegate:self];
    [aNetService resolveWithTimeout:5.0];

}

- (void)netServiceDidResolveAddress:(NSNetService *)service{

    NSInputStream * istream;
    [sender getInputStream:&istream outputStream:nil];
    [istream retain];
    [istream setDelegate:self];
    [istream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [istream open];

    [service release];
}

//... NSStreamDelegate method to retrieve the data via the stream.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3129341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档