Tag: udp

通过GCDAsyncUdpSocket发送多播UDP失败,Wireshark中没有任何活动

它适用于任何已知的IP,如下所示: [udpSocket sendData:datatosend toHost:@"192.168.1.113" port:port withTimeout:-1 tag:0]; 但是,当我试图使用宽带多播,没有logging,什么都没有发生 [udpSocket sendData:datatosend toHost:@"192.168.1.255" port:port withTimeout:-1 tag:0]; 接收作品好吧,我也试过255.255.255.255 – 相同。 它不会给出任何错误。

GCDAsyncUdpSocket无法在iOS模拟器上绑定端口

我正在通过UDP发送消息。 但是,我一直被困在“绑定端口”的问题上。 当我第一次在iOS模拟器上构build项目时,没有什么奇怪的事情发生。 一切都很好。 但是当我第二次build立这个项目的时候 当应用程序尝试绑定端口时,我收到来自terminal的错误消息。 消息是这样的“错误域= NSPOSIXErrorDomain代码= 48”地址已经在使用“UserInfo = 0x767c830 {NSLocalizedFailureReason =错误在bind()函数,NSLocalizedDescription =地址已经在使用}” 令我困惑的是,当我在iPad上运行我的应用程序时,错误没有出现。 我想也许这是因为我没有closures套接字。 但为什么它在iPad上正确? 希望有人能解决这个问题。 谢谢!

从iOS服务器上的UDP服务器接收数据不能从Linux服务器上工作,但从MacBook Pro工作

背景:我做了一个基于UDP的IP套接字应用程序。 它在与Linux [Ubuntu]服务器通信时作为客户端和服务器。 我正在使用GCDAsyncUdpSocket发送和接收数据。 我的Macbook上还有一个备份服务器/客户端应用程序来testing/validation套接字通信应用程序。 它只是像Linux [Ubuntu]服务器。 它工作完美。 问题:我无法从Linux [Ubuntu]服务器接收任何数据。 详细信息:我可以成功地将数据发送到Linux服务器,并对该数据作出反应/处理。 但是,当服务器发送回复或回声,我的iPhone应用程序无法看到/读取它。 我与一位Android同事开发的一个类似的应用程序确实从服务器读取/查看数据。 请参阅下面的代码。 干杯! 这是它的代码:.m文件: -(void)viewDidLoad { [super viewDidLoad]; backGround.userInteractionEnabled=YES; udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; if (![udpSocket bindToPort:0 error:&error]) //check ff of dit werkt! { return; } if (![udpSocket beginReceiving:&error]) { return; } } – (IBAction)sendData:(id)sender { NSString *msg […]

绑定UDP套接字到蜂窝IP

我正在尝试创build一个iOS客户端,通过设备的蜂窝通信将数据发送到UDP套接字上的服务器。 以下是IOS支持同时wifi和3G / 4G连接? 链接到iOS多pathBSD套接字testing ,我试过在Swift 3中实现解决scheme,即枚举设备中的networking接口,识别蜂窝接口(如Swift中的build议- 获取设备的IP地址 ),创build一个UDP套接字并绑定它到从界面检索到的sockaddr 。 在Swift中实现套接字编程是通过以下Swift中的Socket编程实例完成的:第1部分 – getaddrinfo和后续文章。 不幸的是,我试图在套接字上发送数据时收到操作不允许 ,所以相反,我试着创build套接字并将其绑定到getaddrinfo在指定端口(5555)上调用的数据。 这也没有办法。 有趣的是,在试图理解什么是错误的时候,我为这两种方法创build了一个testing应用程序,并且当连续testing1000次create-> bind-> send-> close时,大约有3-5次尝试发送数据没有任何方法的错误。 不用说这是在实际的iPhone上testing的。 相当茫然,我很感激有关这方面的任何build议。 在静态“SocketManager”类中实现的代码( 编辑:固定的sockaddr分配大小) // Return IP address String, port String & sockaddr of WWAN interface (pdp_ip0), or `nil` public static func getInterface() -> (String?, String?, UnsafeMutablePointer<sockaddr>?) { var host : String? var service : […]

不同设备的结果不同

首先,我不得不说,我设置date和时间设置自动设置和时区是相同的每个设备。 所以我使用[NSDate date]以毫秒为单位获取时间戳,然后编码到NSData并发送到另一个设备。 接收器上的数据正在被解码,并且与新的[NSDate date]相减。 这样我就可以获得发送和接收消息所需的总时间。 我认为,因为当发件人是iPhone 4的iOS6和接收器是iPhone 5的iOS7,然后接收方比发件人有更早的时间戳。 我不知道为什么? 也许[NSData date]不是那种types的操作最可靠的类? 我使用GCDAsyncUdpSocket发送/接收UDP。 代码发送者 NSData *data2 = [self createRandomNSData:8192]; NSMutableData *dataToSend =[NSMutableData data]; [dataToSend appendBytes:&tag length:sizeof(int)]; long long currentTimeStamp = (long long)([[NSDate date] timeIntervalSince1970]*1000.0); [dataToSend appendBytes:&currentTimeStamp length:sizeof(long long)]; [dataToSend appendData:data2]; NSLog(@"%i || %lld || %lu",tag, currentTimeStamp,(unsigned long)[dataToSend length]); [_udpSocket sendData:dataToSend toHost:@"230.0.0.1" port:_port withTimeout:-1 tag:tag]; tag++; […]

我应该使用哪种高级API来pipe理iOS上的UDP套接字?

苹果公司在“ networking编程主题概念指南 ”的“ 使用套接字和stream ”一章中说: 注意: POSIXnetworking不会在iOS上激活蜂窝无线电。 出于这个原因,在iOS中通常不鼓励POSIXnetworkingAPI。 另外在“ networking概述指南 ”的“ networking技巧和陷阱 ”一章中,苹果说: 在iOS中,使用直接使用POSIX函数或CFSocket的套接字不会自动激活设备的移动调制解调器或按需VPN。 好吧,所以在iOS上,不应该使用POSIX套接字,也不应该使用CFSocket,它只是通过RunLoops支持asynchronousnetworking的POSIX套接字的薄包装。 没问题。 但是,如果你需要一个UDP套接字 ,你应该使用什么API? 进一步的苹果在“ networking概述指南 ”的“ networking技巧和陷阱 ”一章中说: 连接到主机之前,请避免parsingDNS名称 所以理想情况下,应该有一个用于pipe理UDP套接字的API,除POSIX API和CFSocket之外,它接受DNS名称而不是目标地址的IP地址。 也许我是盲目的,但我无法find任何这样的API。 有任何想法吗? 使用任何第三方API(不是来自Apple)都没有意义,因为这样的API必须基于Apple API,在这种情况下,我可以直接使用这个Apple API。 用POSIX套接字编写我自己的包装API是小菜一碟,以前我写了这么多的套接字包装器,我已经知道所有令人讨厌的陷阱。 然而,我不会使用POSIX API,这是最初的问题。

在iOS中跨应用程序共享UDP数据(背景/前景或分屏多任务)

我正在撰写一个研究应用程序,利用通过UDP广播数据的特定传感器。 有各种商业应用程序使用这种传感器,我们希望能够并行运行我们的应用程序和现有的应用程序。 在过去(iOS 8及以下版本),我们将在后台运行我们的应用程序,在前台logging数据和不同的应用程序。 不幸的是,似乎只有一个应用程序能够绑定到传入的UDP数据(这是有道理的),但即将到来的'并行'的应用程序function,我想知道是否有任何解决scheme来共享应用程序之间的数据。 我唯一能想到的是以某种方式让我们的应用程序捕获数据并将其重新广播给其他应用程序,但是我不知道这是否可能在iOS中,即使这是你如何确定“谁“在UDPstream上locking。 苹果的文档在: https : //developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145似乎没有提供太多的信息。

从UDP服务器消息中检索string

我在我的基于Swift的iOS应用程序中使用CocoaAsyncSocket库。 我已经创build了一个asynchronousUDP套接字到我的networking上的UDP服务器,并发送回答。 我正在阅读这样的答复: func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) { println("didReceiveData") let data = address var host: NSString? var port1: UInt16 = 0 GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address) println("From \(host!)") let gotdata = NSString(data: data, encoding: NSASCIIStringEncoding) //let gotdata: NSString = NSString(data: data, encoding: NSUTF8StringEncoding) println(gotdata) } 这是结果: didReceiveData […]

iPhone UDP广播和响应

我需要从iPhone发送一个UDP广播,然后侦听超时时间的UDP响应。 我发现苹果的UDPEcho例子,但我不知道,如果这是我所需要的。 还发现这个例子发送,但没有收到。 基本上,我需要做这样简单的事情: //send the broadcast SendUDP("255.255.255.255", targetPort, myData); //A blocking call to get the data. Timeout value will be short, 2 seconds at most //An asynchronous option is ok, if it's necessary. Response = GetFirstUDPResponse(receptionPort, timeoutValue); //process the response if(Response == null) //we timed out else //process response 我希望有一个简单的解决scheme,我不必重新发明车轮。 我很欣赏任何关于实施这个最佳策略的build议!

没有使用GDAsyncUdpSocket接收UDP多播的iOS设备

下面的代码旨在接收239.255.255.250上的UDP多播消息,并简单地NSLog消息的内容。 如果我将消息发送到iOS设备的IP地址(即从terminalecho foo | nc -u 10.1.10.249 1900 ),则会收到消息并进行NSLog。 但是,如果我将消息广播到多播地址( echo bar | nc -u 239.255.255.250 1900 ),则不会收到该消息。 启动时不logging错误消息。 关于我要去哪里的错误? #import "ViewController.h" #import "GCDAsyncUdpSocket.h" @interface ViewController () { GCDAsyncUdpSocket *udpSocket; } @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *error = nil; if (![udpSocket bindToPort:1900 error:&error]) { NSLog(@"Error […]