2012-01-03 3 views
0

ios에서 Banjour 기반 응용 프로그램을 구현하려고합니다. 나는 성공을 완벽하게 구현하여 하나의 아이폰으로 다른 아이폰으로 데이터를 보내고 받는다. 작업을 검색 한 후 다른 모든 장치를 서비스합니다. 표에 표시하십시오.Bonjour 기반 iOS 응용 프로그램에서 복수 주소를 확인하는 방법은 무엇입니까?

enter image description here

는 이제 테이블 뷰 일부 장치를 선택하고, 선택된 장치 나 각 장치의 하나 개의 소켓을 생성하는 옵션

enter image description here

에 데이터를 전송하기 원한다.

CFSocketContext socketCtxt = {0, self, NULL, NULL, NULL}; 
    witap_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET6, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerAcceptCallBack, &socketCtxt); 

    if (witap_socket != NULL)   
    { 
     protocolFamily = PF_INET6; 
    } 
    else 
    { 
     witap_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerAcceptCallBack, &socketCtxt);   
     if (witap_socket != NULL) 
     { 
      protocolFamily = PF_INET; 
     } 
    }  

이제 선택한 장치로 데이터를 보내려고합니다. 그 때문에 나는 선택된 NSNetService (즉, 장치)를 다른 NSMutableArray에 저장했다. 사용시 특정 동작이 호출되는 보내기 버튼을 클릭하십시오.

-(void)SendActionFunction 
{ 
     for(int idx=0;idx<[selectedSer count];idx++) 
    { 
     NSNetService *service = [self.selectedSer objectAtIndex:idx]; 
     NSLog(@"service......%@",[service name]); 
     self.currentResolve = [self.selectedSer objectAtIndex:idx]; 
     [self.currentResolve setDelegate:self];  
     [self.currentResolve resolveWithTimeout:0.0]; 
    } 
} 

위의 코드에서 각 장치의 주소를 확인하려고 시도하는 경우입니다. 첫 번째 장치에서만 해결됩니다. 오류

  • (오류 코드 = -72003]

하나 내가 자동으로있는 tableView에서 제거 장치에 대한 주소

를 해결하면 더 문제가 그래서 내 의심은 점점 :.

  1. 왜 선택한 장치가 재생성 되나요?
  2. 지금 ic TCP 기반 소켓 reate, 데이터를 보낼 대상 주소를 추가하는 방법?
  3. 단일 소켓에서 여러 대상으로 데이터를 보낼 수 있습니까?

답변

0

Apple의 정의에 따르면 CFSocket은 BSD 소켓으로 구현 된 통신 채널입니다.

장치간에 소켓 연결을 설정했습니다. 그러나 데이터를 보내고 받으려면 NSStream을 사용해야합니다. 문서를 찾을 수 있습니다 here

참조로 Witap을 사용하고 있습니다.

데이터를 보내고 받으려면 NSStreamDelegate도 사용하십시오.

관련 문제