1

私は Adob​​e Stratus (現在は Cirrus に名前が変更されています) を使用して p2p アプリケーションを構築しています。アプリケーション内でNetStream.onPeerConnectコールバック関数を使用し、ピアが接続されるたびにトリガーされることを期待していました。しかし、奇妙なことに友人Bは問題なく関数を呼び出すことができたのに対し、友人Aでは常に失敗しました。

この問題の原因は何だろうかと考えていました。

コード部分は次のようになります。

まず、NetConnectionを作成します。

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

次に、NetConnection が正常に接続されたら、 NetStreamを作成します。

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");
            ......

3 番目に、2 つのピア間の接続を構築する方法を次に示します。

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

私を啓発するのを手伝ってください。ありがとう!

4

1 に答える 1

1

私の友人 A は対称 NAT の背後にいることがわかりました。正常な接続を確立するために、TURN サーバーをセットアップすることを考えています。

于 2010-12-04T09:12:48.143 に答える