问题
I used the openfire as the xmpp server, and want to transfer file via the Turnsocket.
The openfire (local) config:
xmpp.auth.anonymous true
xmpp.domain local
xmpp.enabled true
xmpp.externalip proxy.local, 192.168.1.101, 127.0.0.1
xmpp.proxy.enabled true
xmpp.proxy.port 7777
xmpp.proxy.transfer.required false
xmpp.server.socket.active true
xmpp.session.conflict.limit 0
xmpp.socket.ssl.active true
I tested the file transfer in the local environment, one user is logged in by Simulator (Sender), the other user is logged in by Device (iPod, receiver).
TURNSocket.m (both changed), change the proxy
+ (void)initialize { ... proxyCandidates = [[NSMutableArray alloc] initWithObjects:@"local", nil]; ... }
Config both on sender and receiver
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq { ... if ([TURNSocket isNewStartTURNRequest:iq]) { NSLog(@"IS NEW TURN request Receive.. TURNSocket.................."); TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:xmppStream incomingTURNRequest:iq]; [turnSockets addObject:turnSocket]; [turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()]; [turnSocket release]; } return YES; }
Setup and call TURNSocket (Sender)
TURNSocket *turnSocket = [[TURNSocket alloc] initWithStream:[self xmppStream] toJID:user.primaryResource.jid]; [turnSockets addObject:turnSocket]; [turnSocket startWithDelegate:self delegateQueue:dispatch_get_main_queue()]; [turnSocket release];
didSucceed called both (sender and receiver)
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {
}
Send a file? on sender
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket { NSData *dataF = [[NSData alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"a1" ofType:@"png"]]; [socket writeData:dataF withTimeout:60.0f tag:0]; }
OR: Received data here? (Receiver)
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket { NSData *dataF = [[NSData alloc] init]; [socket readDataToData:dataF withTimeout:30.0 tag:0]; NSLog(@"dataF: %d", [dataF length]); // dataF: 0 }
Does anyone know what's the problem?
Thanks very much!
回答1:
To set an external ip address, you need to use xmpp.proxy.externalip rather than xmpp.externalip
来源:https://stackoverflow.com/questions/8877864/xmppframework-turnsocket-cant-receive-the-data-that-sent-by-myself