2011-11-22 1 views
0

간단한 Jabber 클라이언트를 만들려고합니다. xmpp-framework 이 샘플 프로젝트를 다운로드했습니다. iOS 시뮬레이터에서 실행하고 있습니다. iChat에 로그인 한 사용자와 상호 작용할 수 있도록 Openfire를 로컬에 설치했습니다.iPhone Jabber/XMPP 클라이언트 ... "연결 실패"

불행히도 응용 프로그램 만 메시지를받습니다. "TURN Connection failed!"오류 메시지를 보내는 데 실패합니다.

코드는 연결을 시도 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.tView.delegate = self; 
    self.tView.dataSource = self; 
    [self.tView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 

    messages = [[NSMutableArray alloc ] init]; 

    JabberClientAppDelegate *del = [self appDelegate]; 
    del._messageDelegate = self; 

    [self.messageField becomeFirstResponder]; 

    XMPPJID *jid = [XMPPJID jidWithString:@"[email protected]"]; 

    NSLog(@"Attempting TURN connection to %@", jid); 

    TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[self xmppStream] toJID:jid]; 

    [turnSockets addObject:turnSocket]; 

    [turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
    [turnSocket release]; 
} 

을 그리고 그이 방법이 성공/실패에 호출됩니다

- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket 
{ 
    NSLog(@"TURN Connection succeeded!"); 
    NSLog(@"You now have a socket that you can use to send/receive data to/from the other person."); 

    [turnSockets removeObject:sender]; 
} 

- (void)turnSocketDidFail:(TURNSocket *)sender 
{ 
    NSLog(@"TURN Connection failed!"); 
    [turnSockets removeObject:sender]; 
} 

사람이 도와 주실 수 있습니까? 감사합니다.

답변

1

일반 메시징에 TURN을 사용할 이유가 없습니다. TURN은 미디어 스트리밍에만 필요합니다. XMPPFramework을 사용해주세요. 좋은 시작 안내서가 있습니다.

다음으로, 이러한 성격의 코드를 사용이 스탠자를 작성하고 보낼 :

XMPPMessage *msg = [XMPPMessage message]; 
[msg addAttributeWithName:@"type" stringValue:@"chat"]; 
[msg addAttributeWithName:@"to" stringValue:@"[email protected]"]; 
NSXMLElement *body = [NSXMLElement elementWithName:@"body" stringValue:@"Hello"]; 
[msg addChild:body]; 
[[self xmppStream] sendElement:msg]; 

msg 그 NSXMLElement 단지 서브 클래스입니다, 당신은 당신이 가고있는 프로토콜을 만드는 법 마음대로 XML을 수정할 수 있도록 보내다.

+0

일부 지적 해 주시겠습니까? 메시지를 보내는 방법에 대한 연결을 시작하는 방법에 대한 설명서 만 찾았습니다. 고맙습니다. –

+0

TURN은 필요하지 않습니다. 오류는 메시지를 보낼 수 없다는 것과 관련이 없습니다. 나는 SendMessage 메소드를 App Delegate로 옮겼다. 나는 이유를 모른다. 그러나 그것은 효과적이다. –

+0

@Joe : - iOS, 모든 링크 또는 의사의 통합 XMPP에 대한 언급을 할 수 있습니까? 나는 이것을 위해 운이 없다. – iOSAppDev