2010-12-02 2 views
1

Я использую Adobe Stratus (теперь переименованный в Cirrus) для создания приложения p2p. Внутри приложения я использовал функцию обратного вызова NetStream.onPeerConnect и ожидал, что он будет запускаться каждый раз, когда подключен одноранговый узел. Тем не менее, он всегда терпел неудачу с моим другом А, а странному другу Б. удалось вызвать функцию без каких-либо проблем.Что препятствует запуску NetStream.onPeerConnect?

Мне было интересно, что может быть причиной этой проблемы?

Вот как выглядят фрагменты кода.

Прежде всего, создайте NetConnection.

netConnection = new NetConnection(); 
netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler); 
netConnection.connect(SERVER_ADDRESS+DEVELOPER_KEY); 

Во-вторых, создать NetStream на NetConnection успешно подключен.

private function netConnectionHandler(event:NetStatusEvent):void{ 

    switch (event.info.code){ 
     case "NetConnection.Connect.Success": 

      sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); 
      sendStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); 

      var sendObj:Object = new Object(); 
      sendObj.onPeerConnect = function(subscriber:NetStream) : Boolean { 

       trace("[onPeerConnect] far id: " + subscriber.farID); 
       return true; 
      } 
      sendStream.client = sendObj; 
      sendStream.publish("file"); 
      ...... 

В-третьих, вот как я построить связь между двумя узлами

receivedStream = new NetStream(netConnection, farId); 
    receivedStream.client = this; 
    receivedStream.addEventListener(NetStatusEvent.NET_STATUS, incomingStreamHandler); 
    receivedStream.play("file"); 

Пожалуйста, помогите просветить меня. Благодаря!

ответ

1

Получается, что мой друг А находится за симметричным NAT. Я собираюсь настроить сервер TURN для создания успешного соединения.

Смежные вопросы