마이크로 칩 플랫폼 용 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 앱에서 동일한 소켓 라이브러리를 사용했다
호스트 가치는 무엇입니까? 255.255.255.255가되어야합니까? – user523234
글쎄요, 여러 호스트 주소가 있습니다. 모든 사람에게 브로드 캐스트하여 메시지를 식별하는 모든 하드웨어 장치가 응답하도록합니다. 아이폰 시뮬레이터를 통해 udp를 보내는 내 노트북은 192.168.2.1입니다. 그렇다면 192.168.2.3, 2.34,2.101 등과 같이 응답을 받고 싶은 장치가 여러 개 있습니다. 현재 하나의 호스트 주소 (예 : 192.168.2.34)를 지정하면 응답을받을 수 있습니다. – aVC
255.255.255.255에 메시지를 보낸 지정된 Java 코드에 대한 내 의견을 기반으로합니다. 이 주소로 UDP 데이터 그램을 보내면 로컬 네트워크 세그먼트의 모든 호스트에 메시지가 배달됩니다. – user523234