Tag: 套接字

BSD套接字在iPhone 3G环境中不起作用

我注意到很多时候在为iPhone 3G开发的时候,BSD套接字函数将会失败。 我当时也注意到,3G天线还没有开,也没有WIFI接入来备份networking通话(所以看起来很可笑,不开启支持networking请求)。这个信息是在苹果的一个应用程序中进行了validation,称为连接testing(Connectivity Test),或者类似的东西。 基本上,如果你加载Safari或其他东西,然后快速加载应用程序将罚款..当然,这并不理想。 显然,苹果,gethostbyname()或类似的东西绝不是打开天线的理由。 我就此联系了苹果公司,他们说BSDfunction不能切换天线,但调用所有的Objective-C CFNetworkfunction。 我想要便携式代码,那么有没有办法保持我现有的BSD设置? 我真的不喜欢在Objective-C中编码,所以如果有人知道一个工作,这将是很棒的。

有什么指导iOS的runloop机制?

我正在学习iPhone上的套接字通信,其指南中提到了有关CFRunloop一些信息(这是CFNetwork的指南,可以在iOS上使用吗?)我可以在哪里了解iOS上的runloop?API引用是不够的。

无法编程stream

所以这里的问题是:stream没有在正确的时间写入,无法从我的服务器得到响应。 我知道我正在写正确的数据,因为当我停止构build时,它写入到服务器,服务器很高兴。 我很困惑,为什么这不是在正确的时间发生。 我正在使用GCDAsyncSocket读取/写入套接字 我做了一个单独的类来处理所有的networking,这里是我的代码: -(id)init{ self = [super init]; if (self) { asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; if (![asyncSocket connectToHost:@"localhost" onPort:8888 error:&error]) // Asynchronous! { // If there was an error, it's likely something like "already connected" or "no delegate set" NSLog(@"I goofed: %@", error); } } return self; […]

如何在iOS中列出TCP / UDP连接

我有兴趣在iOS 4.3设备上获取活动的TCP / UDPnetworking连接列表。 基本上,我正在寻找与在OS X Darwin下发布“netstat -anp tcp”(或者相同,但是使用udp)命令相同的信息。 我search了苹果的iOS开发者库(特别是NSNetServices,CFNetServices和iOS手册页)和互联网,但没有好的结果。 然而,有一个iOS Netstat应用程序(请参阅http://itunes.apple.com/us/app/netstat/id400071873?mt=8&ign-mpt=uo%3D2 ),所以它似乎是可能的。 提前感谢任何有用的指针/build议/想法。

是否有可能在Apple iOS设备上激活TCP Keepalive

苹果设备===路由器=== WiFi模块 苹果设备(iPhone)正在通过TCP连接连接到WiFi模块端口2000。 我想在Apple设备上激活TCP keepalive包发送,以确定什么时候TCP连接到WiFi模块丢失(模块closures)。 我的stream设置 CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)CFBridgingRetain(moduleIPaddress), port2000, &readStream, &writeStream); outputStream = (NSOutputStream *)CFBridgingRelease(writeStream); inputStream = (NSInputStream *)CFBridgingRelease(readStream); [outputStream setDelegate:(id)self]; [inputStream setDelegate:(id)self]; [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream open]; [inputStream open]; 我试图激活keepalive根据大卫H后保持套接字连接在iOS中活着 – (void) stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { switch (streamEvent) { case NSStreamEventOpenCompleted: if (theStream == outputStream) […]

一起发送多个OBD命令并同时获得响应

我正在研究连接OBD2适配器并获取速度,转速,节气门位置等实时数据的应用程序。当我一次读取一个命令时,它通过发送命令“010C \ r”正常工作,我得到当前RPM。 我认为在一个请求中发送多个命令是不可能的。但是在像EngineLink HD,Dashcommand这样的其他应用程序中,我们发现多个组件是一次更新的,就像我们驾驶汽车并检查RPM,Sped和Throttle一样正在每1秒更新一次。 它看起来像实时数据。 我很惊讶,这怎么可能? 我们添加了一些代码,如用户想要显示3个组件,然后为每个组件生成一个线程,并处理该命令的请求和响应。 所以在这种情况下,生成3个线程,我们得到响应,但是如果我们在3个PID中观察速度,则花费太多时间,然后在3-4秒延迟之后更新速度。 我们还需要locking发送请求的代码,并获得响应bcoz OBD2适配器一次处理一个请求和响应。 如果我们不locking代码,那么我们得到不可预知的结果,这可能是由于应用程序和obd2适配器之间的套接字通信所使用的公用共享stream所致。 但是现在我想一次读多个命令。 我的意思是在某个时间点,我想知道速度,转速和油门位置等。所以我想发送一个请求上面的命令,并得到一个响应。 这怎么可能 ? 有人可以指导我。

setKeepAliveTimeout iOS行为在300秒内超过15次唤醒

我正在编写iOS 5上的VOIP应用程序,我正在尝试了解实际的通信如何在后台保持活跃状态​​。 我知道,每个时间量都可以获得最大的唤醒次数。 我的问题是,我的套接字连接收到太多的唤醒消息,因为该应用程序终止与崩溃消息: 在300秒内超过15次醒来 我真的不明白的是,如果每个时间段内可以接收的数据量有限制,那么sockets应该如何能够不断地发送和接收数据(为了VOIP的需要)呢? 让我们说,套接字正在接收语音数据,用于在后台进行的语音对话。 这不是说声音数据应该通过套接字连接吗? 如果是这样的话,如果每个时间段的套接字可以有活动的限制,它又怎么能起作用呢?