2014-11-04 89 views
0

我正在製作一個iOS應用程序,該應用程序應該使用UDP協議進行通信(設備連接到相同的Wi-Fi網絡)。我設法創建一個socket,有些數據發送到指定的IP地址:iOS雙向通信

const char *ip = "192.168.1.100"; 

- (void)initNetworkCommunication { 

    cfSocket = CFSocketCreate(kCFAllocatorDefault, AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, NULL, NULL); 

    if (cfSocket == NULL) { 
     NSLog(@"CfSocketCreate failed"); 
    }else{ 
     if(cfSocket) { 
      NSLog(@"Socket created "); 

      struct sockaddr_in addr; 
      memset(&addr, 0, sizeof(addr)); 
      addr.sin_len = sizeof(addr); 
      addr.sin_family = AF_INET; 
      addr.sin_port = htons(1470); //port 
      inet_pton(AF_INET,ip, &addr.sin_addr); //ip adress 

      CFDataRef addrData = CFDataCreate(NULL, (const UInt8*)&addr, sizeof(addr)); 
      CFSocketSetAddress (cfSocket, addrData); 
      char message []= "UDP test message"; 

      CFDataRef Data = CFDataCreate(NULL, (const UInt8*)message, sizeof(message)); 
      CFSocketSendData(cfSocket,addrData, Data, 0); 
     } 
    } 

這工作得很好,我認爲,隨着設備得到消息。問題是我真的不知道從哪裏開始收聽/接收數據。我試圖尋找一些幫助,但遺憾的是沒有任何有用的結果。大多數人都在使用外部庫,這是我想避免的。如果有人能夠就這個話題給我一些指導,我會非常感激。

回答

0

...我已經尋找了一些今天上午多了,居然發現我一直在這個主題中尋找:

UDP broadcast using CFSocket on IOS

添加一個回調到插座,加上配置RunLoop就像一個魅力: )如果你想從回調中獲得數據,只需使用類似這樣的東西:

NSData * someData = (NSData*)data; 
NSString * someString = [[NSString alloc] initWithData:someData encoding:NSASCIIStringEncoding]; 

希望這可以幫助別人。