2011-02-16 4 views
-1

내 실제 프로젝트에 대해 미쳐 가고 있습니다 ...iPhone iOS4.2의 특정 포트에서 수신하는 방법은 무엇입니까?

특정 포트에서 데이터를 전송하는 장치가 있습니다. 내 목표는 해당 포트에서 모든 종류의 장치를 감지하는 것입니다. 예 : 동일한 네트워크에 4 개의 장치가 있으며 iPhone에서이 장치를 모두 감지합니다.

JAVA 발견 도구와 함께 작동하며 이제는 iPhone에서 수행하려고합니다.

는 도구 JAVA에서 사용되는 단계가을 발견하는 있습니다

  • 이 DatagramSocket로 만들기 (JAVA)
  • 는 브로드 캐스트 주소 (255.255.255.255)를 가져
  • DatagramPacket의 (JAVA)
  • 만들기 포트 30303을 사용하여 브로드 캐스트 주소로 패킷 보내기
  • 수신 모드로 이동
  • 소켓으로 인해 응답이 발생 함 ERS 패킷
  • AsyncUdpSocket 클래스를 사용하여 내가 같은 단계를 repoduce하려고

IP와 장치에서 호스트 이름을 추출 : 여기 http://code.google.com/p/cocoaasyncsocket/

과 내가 지금까지 시도 코드는 다음과 같습니다

NSError *e; 
NSString *d = @"abcd"; 
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding]; 


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self]; 
[ssocket setDelegate:self]; 



[ssocket enableBroadcast:YES error:&e]; 


[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e]; 


[ssocket sendData:data withTimeout:-1 tag:0]; 

[ssocket receiveWithTimeout:-1 tag:0]; 

위임 호출되지 않습니다 - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port ...

내가 무엇을 모르는 틀렸어.이 주제에 대해 너의 의견을 말해 줄 수 있니? 올바른 방법론을 사용하고 있고 내가 잘못했는지 확인하십시오. ??

미리 감사드립니다.

MoKeS

편집 :

내가 JavaDiscoverTool 내 응용 프로그램과 네트워크 트래픽을 도청 와이어 샤크를 사용했다. 사실 2 패킷 (아이폰과 javadiscovertool의 차이)은 소스 포트입니다. 사실, 내 응용 프로그램에서 원본 포트가 대상 포트와 다르며 문제가 원인이라고 생각합니다. 보내는 패킷에 원본 포트를 강제로 보내는 방법을 찾아야합니다 ...

아이디어가 있으십니까? AsyncUdpSocket 클래스에 있습니다.

+0

가 오류 개체를 검사 해달라고? 그것이 그들이 잘하는 일입니다. – GorillaPatch

답변

0

해결책을 찾았습니다.

사용 :

NSError *e; 
NSString *d = @"Discovery: Who is out there?\0\n"; 
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding]; 


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self]; 
[ssocket setDelegate:self]; 

[ssocket bindToPort:PORT error:&e]; 

[ssocket enableBroadcast:YES error:&e]; 


//[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e]; 


//[ssocket sendData:data withTimeout:-1 tag:0]; 

[ssocket sendData:data toHost:@"255.255.255.255" port:30303 withTimeout:-1 tag:0]; 


[ssocket receiveWithTimeout:-1 tag:0]; 

그리고 대표 :

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port 
{ 
    NSString* aStr; 

    aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 


    NSLog(@"didreceivedata : %@", aStr); 

    return NO; 


} 
관련 문제