iPhone无法接收使用UDP recvfrom的数据

我写被连续发送和接收数据的应用程序。 我最初的发送/接收运行成功,但是当我期待大小的数据512字节在recvfrom的,我得到它的返回值是-1,这是“资源暂时不可用。” 并设置errno为EAGAIN。 如果我使用一个阻塞调用即没有超时的应用程序只是挂在recvfrom的。 是否有recvfrom的iPhone上的任意一个最大限制吗? 下面是其中从服务器接收数据的功能。 我无法弄清楚什么可以去错了。

{ struct timeval tv; tv.tv_sec = 3; tv.tv_usec = 100000; setsockopt (mSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv); NSLog(@"Receiving.. sock:%d",mSock); recvBuff = (unsigned char *)malloc(1024); if(recvBuff == NULL) NSLog(@"Cannot allocate memory to recvBuff"); fromlen = sizeof(struct sockaddr_in); n = recvfrom(mSock,recvBuff,1024,0,(struct sockaddr *)&from, &fromlen); if (n == -1) { [self error:@"Recv From"]; return; } else { NSLog(@"Recv Addr: %s Recv Port: %d",inet_ntoa(from.sin_addr), ntohs(from.sin_port)); strIPAddr = [[NSString alloc] initWithFormat:@"%s",inet_ntoa(from.sin_addr)]; portNumber = ntohs(from.sin_port); lIPAddr = [KDefine StrIpToLong:strIPAddr]; write(1,recvBuff,n); bcopy(recvBuff, data, n); actualRecvBytes = n; free(recvBuff); }

}

--------------解决方案-------------

阅读手册页:

如果可在插座没有消息,接收呼叫等待消息到达,除非套接字是非阻塞(见的fcntl(2)),在这种情况下,则返回值-1,而外部变量errno设置为EAGAIN

我在写一个UDP的应用程序,并认为我遇到类似的问题。 彼得Hosey是在指出的给定的结果正确recvfrom意味着没有数据要读取; 但你不知道,哪有没有数据?

如果是从一些主机发送多个UDP数据报在同一时间到你的iPhone,其中的一些数据报可能被丢弃,因为接收缓冲区的大小(在iPhone上)不是大到足以容纳如此多的数据一次。

坚固的方式来解决这个问题是要实现一个功能,可以让您的应用程序请求数据包丢失的重传。 一个没有强大的解决方案(这并不能解决所有的强大的解决方案做的问题)是简单地增加使用接收缓冲区大小setsockopt(2)

缓冲区的大小的调整可以如下进行:

int rcvbuf_size = 128 * 1024; // That's 128Kb of buffer space.
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF,
&rcvbuf_size, sizeof(rcvbuf_size)) == -1) {
// put your error handling here...
}

你可能有玩弄缓冲区大小,找到什么是最适合你的应用程序。

分类:iphone 时间:2012-01-01 人气:0
分享到:

相关文章

  • 凡将“核心数据堆栈”在可可/可可触摸应用 2013-07-19

    在iPhone的核心数据模板,苹果会将核心数据堆栈在App代表. 但是我最初的倾向是这个代码移动到它自己的类,它负责处理核心数据堆栈的管理. 你通常会在自己的类封装了这个功能还是你离开它在App委托? --------------解决方案------------- 摘要:有没有必要创建一个单独的管理核心数据堆栈; 确实是这样做可能会适得其反. 核心数据堆栈恰好是由应用程序委托创建. 重要的,但是,由于所有的实施例表明,栈(主要是管理对象的上下文) 不直接从堆栈(*)检索. 代替上下文被传递到第一

  • iPhone或可可:多个HTTP请求的处理顺序 2012-08-18

    当与可可/可可Touch和iPhone SDK的工作,一个典型的惯例是建立它讲的服务器端的Web服务器的客户端. 我面对编程时一个常见的​​问题是使依次多个HTTP请求,有时可达5-6请求. 在这些要求是由不是线性,其中它们将返回的顺序. 当视图被带到上的这些请求被解雇了关窗,我使用NSNotification让我知道,当特定的数据是可用的通知. 我在思索可能会触发我的用户界面,只有当所有数据集准备的方法. 寻找好的做法和洞察你的方法. 您是否使用互斥体或类似的东西? 简单的计数器? -----

  • iPhone SDK - 使用触摸删除图片 2012-03-24

    如何通过在iPhone SDK使用触摸删除图片? 林制作游戏的图像,所以我想知道如果有一种方法是,如果你摸的图像它被从视图中删除. --------------解决方案------------- 是. 您可以添加UITapGestureRecognizer你的图像视图,并在识别动作你可以通过使用图像视图recognizer.view属性格式. 你可以删除/通过使用其超强的视图中移除[image removeFromSuperview]方法. UITapGestureRecognizer *tgr

  • 的CoverFlow在HTML5为iPhone / iPod的触摸 2012-09-25

    我所要做的目的地为iPhone和iPod触摸需要将苹果的CoverFlow风格在一个页面来显示视频列表的网页. 我听说过一些关于小发明可以帮助,但我找不到任何有关或可能与iPhone / iPod的触控导航正常工作. 任何人都知道,可以帮助我入门的东西吗? 谢谢-Stephanie --------------解决方案------------- 尝试ContentFlow:http://www.jacksasylum.eu/ContentFlow/ 这里是工作在我的iPhone的一个例子:htt

  • 在App代表的Mac OSX / iPhone的错误处理? 2013-01-21

    我很好奇,怎么你们中的大多数人处理错误,如HTTP或禁止从服务器5XX类型的请求? 或者说,一个异常被抛出在UIViewControllers之一? 你通常泡了错误的应用程序代理,并在这一点上处理通用的"窗口"低级错误? 你对夫妇的错误直接进入的UIViewController? 如果你有一些的UIViewController的所有一个共同的NSURLConnection的包装说话,连接失败某些HTTP 4XX或HTTP 5XX类似的错误. 请问您通常泡了错误应用程序代理,因此它可以从

  • 获得在iPhone / iPod的触摸ANT无线和GPS接收器模块 2013-11-12

    我是一个iPhone / iPod的触摸新手,并想利用编写iPhone应用程序内置ANT无线广播. 当我发现无论是iPhone和iPod Touch有一个ANT无线模块,即用于耐克+ iPod运动套件,连接传感器耐克与iPhone / iPod的. 一些googleing后,我并没有找到太多(一篇文章很有意思,但我不看什么). 所以我的问题: 是否有可能访问内置的ANT无线设备时,iPhone / iPod Touch的? 是否有可能访问内置的GPS模块在iPhone? 是否有一些API或软件开

  • 如何创建使用iPhone SDK可可触摸模板? 2012-01-13

    我下载了免费的iPhone SDK. 现在,当我尝试创建我不给创建一个可可触摸模板选择一个新的项目. 我只需要创建一个Mac OS X的模板选项. 没有人知道为什么会发生,以及如何解决它? 编辑:如果你开始重新启动下载这是否损坏下载的材料? --------------解决方案------------- 确保满足iPhone的SDK的最低要求. 我猜你可能是对的Mac PowerPC的这是不是(官方)的支持. 它看起来并不像你正确下载它. 你的模板应该是和准备. 一个重新下载应该做的伎俩. (我

  • 从iPhone OS可可在OSX 2012-06-13

    我来自一个iPhone OS的开发背景. 我现在试着写的应用程序的OSX,但我不明白的地方可可在OSX决定该程序获得控制权. 我能看到的主要功能,但哪里程序控制从那里走? 例如说我想以编程方式创建一个窗口NSView在一次应用程序已完成启动-我将如何做到这一点? 有创造,我看不出有什么应用程序的委托,在iPhone OS中我会等待-(void) applicationDidFinishLaunching:(UIApplication *)application方法被调用. 我真的不想使用接口生成

  • 指南创建自己的库可可(触摸)的发展 2012-11-14

    我目前使用大量的自定义方法相同的子类的对象. 这将是更方便地创建自己的图书馆,我可以用几个项目 . 我们的目标是有我自己的类是可以用同样的方法类,如UIView CGRect等都是,包括方便的方法,如CGRectMake都与类和结构. 概括起来讲,我要创造我自己的等价物: 像类UIView 像结构CGRect 便捷的功能,如CGRectMake 有这可以作为一个库 有这可以作为一个XCode的模板,因此,拥有这些自定义对象可作为XCode的"新文件" 所以基本上我正在寻找说明如何以创建

  • 同步iPod或iPhone与可可 2014-03-24

    我创建可可iTunes的克隆(不要问为什么,这不是坏事),我希望能够同步我的iPod吧. 这意味着:音乐,照片,视频和播客. 我真的无法找到任何东西,因为谷歌只显示有关iPod touch和iPhone编程的文章,但我确实创造了Mac OS X的桌面应用程序,同时我也希望能够同步点击轮的iPod. 是否有一个API,或者我应该直接读写到USB端口? 谁能帮助我? 谢谢 --------------解决方案------------- 苹果小心翼翼地守护同步功能,并且不提供API. 据我所知,你甚至

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.121 (s). 10 q(s)