Tag: gcdasyncsocket

通过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上正确? 希望有人能解决这个问题。 谢谢!

GCDAsyncSocket在Swift中

我想打开一个基于ELM327芯片的OBDencryption狗的TCP连接。 所以我决定使用GCDAsyncSocket库。 我写了这个代码, import UIKit import CocoaAsyncSocket class ViewController: UIViewController, GCDAsyncSocketDelegate { let addr = "192.168.0.10" let port:UInt16 = 35000 var socket:GCDAsyncSocket! override func viewDidLoad() { super.viewDidLoad() socket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) do { try socket.connectToHost(addr, onPort: port) } catch let e { print(e) } // Do any additional setup after loading the view, […]

不同设备的结果不同

首先,我不得不说,我设置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++; […]

发送到IPv6地址时,GCDAsyncUdpSocket立即closures

我通过UDP连接到由Bonjour公布的不同设备上的服务器。 当运行这个代码的iOS设备和服务器都在我们的wifinetworking上时,它工作得很好,因为bonjour服务parsing为我们的dhcp服务器发出的192.168.0.xxx地址。 但是,当它通过蓝牙广告,有时服务parsing为169.254.xxx.xxx(IPv4),在这种情况下,它工作得很好。 但有时它会解决到fe80 :: xxxx:xxxx:xxxx:xxxx(IPv6)在这种情况下套接字连接(我收到udpSocket:didConnectToAddresscallback),但立即closures当我尝试发送数据(我收到udpSocketDidClose:withErrorcallback立即在发送时)。 – (BOOL) setupConnection: (DNSSDService*) service { NSString *host = [service resolvedHost]; NSUInteger port = [service resolvedPort]; NSLog(@"in setupConnection: host %@ port %u", host, port); self.sock = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue() ]; NSError *err = nil; if (![self.sock connectToHost:host onPort:port error:&err]) { NSLog(@"we goofed: %@", err); return NO; } return YES; […]

如何在GCDAsyncsocket中设置tcp_nodelay?

似乎标题是自描述性的。 我想增加在我的应用程序发送和接收数据的速度,我被告知设置tcp_nodelay为true。 但我不知道如何用GCDAsyncSocket做到这一点。 谁能帮我?

GCDAsyncSocket服务器仅在第一次接收数据

客户端每次按下发送button都会发送消息,而服务器只会在第一次接收消息。 服务器有什么问题 服务器: – (void)viewDidLoad { [super viewDidLoad]; asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *err = nil; if (![asyncSocket acceptOnPort:10000 error:&err]){ NSLog(@"Error in acceptOnPort:error: -> %@", err); } } – (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket { NSLog(@"Accepted new socket from %@:%hu", [newSocket connectedHost], [newSocket connectedPort]); self.asyncSocket = newSocket; NSString *welcomMessage = @"Hello from the server\r\n"; […]

连接后立即断开与服务器的连接

我已经使用GCDAsyncsocket库编写了一个Singleton类,用于使用Bonjourbuild立与具有相同服务的任何其他设备的连接。 在一台设备上,我使用其方法“ startPublishing ”使其成为主机(服务器),从另一台设备(客户机)上的应用程序调用“ StartBrowsing ”来查找可用的networking设备。 当用户select该networking中的任何服务时,我正在调用方法“ initConnectionWithService ”,通过parsingNetService的地址来启动连接stream程来连接。 BonjourUtilClass.h @interface BonjourUtilClass : NSObject<GCDAsyncSocketDelegate,NSNetServiceDelegate,NSNetServiceBrowserDelegate>{ NSNetService *netServiceToPublish; GCDAsyncSocket *socketPub; NSNetServiceBrowser *netServiceToBrowse; GCDAsyncSocket *socketSub; NSMutableArray *mutArrServices; GCDAsyncSocket *socketConnected; } +(id)sharedInstance; -(void)startPublishing; -(void)startBrowsing; -(void)initConnectionWithService:(NSNetService*)netServiceToConnect; -(void)disconnectWithCurrent; @end BonjourUtilClass.m static BonjourUtilClass *sharedObject = nil; @implementation BonjourUtilClass +(id)sharedInstance{ if(!sharedObject){ sharedObject = [[BonjourUtilClass alloc]init]; } return sharedObject; } #pragma mark – Browsing […]

Objective-C:在TLS TCP连接上清除由我们自己的PKI(根CA)签署的服务器证书

* 解决 * 我的问题是参考以下问题: Objective-C:如何用签名者的公钥validationSecCertificateRef? 我们有自己的PKI,所以我们信任自己的rootCA。 通过这个rootCA,我们签署了传递给个人服务器的证书。 现在我想连接iOS应用程序,并检查从服务器传递的证书是否与我们的CA签名。 我的应用程序应该能够使用由GCDAsyncSocketbuild立的TCP连接来连接到具有此证书的n台服务器 (可能使用零configuration服务)。 我有我的应用程序中的证书的公共部分,我想添加到我的“CertChain”,所以应用程序将信任他们连接。 我尝试了很多,但是我仍然无法通过SecTrustEvaluate(trust, &result); 有效的结果。 (我想在生产中使用它,所以请不要告诉我有关停用validation的任何事情) 我的证书: 在app:rootCA,oldServerCA(cer) 在服务器上(通过信任):homeServer,oldServer 我的证书链: 根CA签署的家庭服务器 oldServerCA签署了oldServer 我的代码部分: 添加更新 – (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port; { // Configure SSL/TLS settings NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:3]; // Allow self-signed certificates [settings setObject:[NSNumber numberWithBool:YES] forKey:GCDAsyncSocketManuallyEvaluateTrust]; [sock startTLS:settings]; // get the certificates as data […]

如何使用GCDAsyncUdpSocket通过wifi和蓝牙进行组播

我目前使用GCDAsyncUdpSocket在iOS设备之间通过wifi发送多播数据报。 守则很简单.. 客户 self.socket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; //omitted error checking [self.socket bindToPort:12345 error:&err]; [self.socket joinMulticastGroup:@"224.0.1.1" error:&err]; [self.socket beginReceiving:&err]; 服务器 self.multicastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSData *d = [@"hello" dataUsingEncoding:NSUTF8StringEncoding]; [self.multicastSocket sendData:d toHost:@"224.0.1.1" port:12345 withTimeout:-1 tag:11]; 这工作得很好,无线networking。 我如何使它通过蓝牙工作呢? 我GOOGLE了一堆,找不到任何东西…我需要创build两个单独的套接字? 一个绑定到wifi接口,另一个绑定到蓝牙接口? 编辑:还是我困惑的东西根本? 这一定是可能的。 GameKit的GKSession完全是这样的,对吧?