2013-12-15 3 views
1

마이크로 칩 플랫폼 용 IP 발견 자 앱을 구현하려고합니다. 이 작업을 수행하려면 GCDAsyncSocket을 사용하고 있습니다. 특정 메시지를 보내면 관심있는 모든 장치가 네트워크 자격 증명으로 응답합니다.모든 IP에 GCDAsyncsocket 브로드 캐스트

GCDAsyncSocket을 사용하면 특정 IP를 사용하면 응답을받을 수 있습니다. 그러나 네트워크의 모든 IP에이 메시지를 브로드 캐스트하는 방법을 모르겠습니다.

내 코드 : udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate : self delegateQueue : dispatch_get_main_queue()];

- (void)setupSocket 
{ 
    NSError *error = nil; 


    if (![udpSocket bindToPort:0 error:&error]) 
    { 
     [self logError:FORMAT(@"Error binding: %@", error)]; 
     return; 
    } 
    if (![udpSocket beginReceiving:&error]) 
    { 
     [self logError:FORMAT(@"Error receiving: %@", error)]; 
     return; 
    } 
    [udpSocket enableBroadcast:YES error:&error]; 
    if (error != nil) 
    { 
     NSLog(@"Error enableing broadcast: %@", [error description]); 
     return; 
    } 

    [self logInfo:@"Ready"]; 
} 

- (IBAction)send:(id)sender 
{ 
    NSString *host = addrField.text; 
    NSError *error = nil; 


    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding]; 
    [udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:tag]; 


    [self logMessage:FORMAT(@"SENT (%i): %@", (int)tag, msg)]; 

    tag++; 
} 

이제 어떻게 하나의 IP 대신 모든 IP로 보낼 수 있습니까? 원래의 PC 자바 응용 프로그램에서 나는 비슷한 것을 볼 수 있습니다

socket = new DatagramSocket(30303); 
      socket.setBroadcast(true); 
      InetAddress address = InetAddress.getByName("255.255.255.255"); 
      packet = new DatagramPacket(str.getBytes(), 
        str.length(), address, 30303); 

      socket.send(packet); 

그리고 나는이 응용 프로그램에서 동일하게하고 싶습니다. 약간의 도움을 생각해보십시오.

는 내가 사용한 코드는 나도 같은 목적을 위해 내 iOS 앱에서 동일한 소켓 라이브러리를 사용했다
+0

호스트 가치는 무엇입니까? 255.255.255.255가되어야합니까? – user523234

+0

글쎄요, 여러 호스트 주소가 있습니다. 모든 사람에게 브로드 캐스트하여 메시지를 식별하는 모든 하드웨어 장치가 응답하도록합니다. 아이폰 시뮬레이터를 통해 udp를 보내는 내 노트북은 192.168.2.1입니다. 그렇다면 192.168.2.3, 2.34,2.101 등과 같이 응답을 받고 싶은 장치가 여러 개 있습니다. 현재 하나의 호스트 주소 (예 : 192.168.2.34)를 지정하면 응답을받을 수 있습니다. – aVC

+0

255.255.255.255에 메시지를 보낸 지정된 Java 코드에 대한 내 의견을 기반으로합니다. 이 주소로 UDP 데이터 그램을 보내면 로컬 네트워크 세그먼트의 모든 호스트에 메시지가 배달됩니다. – user523234

답변

2

(네트워크 장치 검색)이었다 ..

_broadcastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
if ([_broadcastSocket enableBroadcast:YES error:&error] == false) { 
     NSLog(@"Failed to enable broadcast, Reason : %@",[error userInfo]); 
    } 
[_broadcastSocket sendData:data toHost:@"255.255.255.255" port:5944 withTimeout:-1 tag:5]; 

있는 NSData 객체와 소켓의 sendata 함수를 호출 것 주어진 포트에서 청취하는 네트워크의 모든 IP로 데이터를 브로드 캐스트합니다.

관련 문제