1. 程式人生 > >使用UDP方式 與iOS端App通訊

使用UDP方式 與iOS端App通訊

  • 首先需要安裝一個TCP&UDP測試工具
  • 連線型別選擇UDP
  • 目標IP 設定手機的IP, 埠8888 (這個埠在App端用來繫結)
  • 指定埠, 是App向回發信息所需要的埠, 具體設定如下圖所示

建立連線

接下來為減少程式碼的鍵入, 我直接使用CocoaAsyncSocket這個三方庫,作為中間媒介完成整個過程

{
      GCDAsyncUdpSocket *udpSocket; // 定義一個socket的物件 簽訂代理 GCDAsyncUdpSocketDelegate
}
2017/7/20 17:05:40
    /*************** UDP ***********************/
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; NSError *error = nil; // 繫結埠 [udpSocket bindToPort:8888 error:&error]; // 啟用廣播 [udpSocket enableBroadcast:YES error:&error]; if (error) { [SVProgressHUD showErrorWithStatus:@"啟用失敗"
]; }else { NSLog(@"%@", [udpSocket localHost]); // 開始接收訊息 [udpSocket beginReceiving:&error]; } /*************** UDP ***********************/
#pragma mark - GCDAsyncUdpSocketDelegate
- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData
*)
address withFilterContext:(nullable id)filterContext { NSLog(@"success"); NSString *ip = [GCDAsyncUdpSocket hostFromAddress:address]; NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"收到響應 %@ %@", ip, s); [sock receiveOnce:nil]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ uint16_t port = 9999; [self sendBackToHost:ip port:port withMessage:s]; });
} - (void)sendBackToHost:(NSString *)ip port:(uint16_t)port withMessage:(NSString *)s{ // 回一個 hello summerxx too char *str = "hello summerxx too" ; NSData *data = [NSData dataWithBytes:str length:strlen(str)]; [udpSocket sendData:data toHost:ip port:port withTimeout:0.1 tag:200]; }

收到資訊

發回一條資訊