我正在嘗試使一個簡單的P2P網絡系統向您的網絡上的其他Flash播放器發送消息。AS3 - 只接收「未定義」數據的本地P2P網絡
但是,當我發送消息時,接收播放器不會收到消息,而是一個未定義的對象。
順便說一句,我確實允許Flash Player在我的病毒掃描程序(NOD 32)和Windows防火牆中運行。
這裏是我的P2P類:
package com.snakybo.as3framework.network {
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
/** @author Kevin */
public class P2P extends NetConnection {
private var netCon:NetConnection;
private var netGroup:NetGroup;
private var handler:Function;
private var groupName:String;
public function P2P(groupName:String, handler:Function) {
this.groupName = groupName;
this.handler = handler;
netCon = new NetConnection();
netCon.addEventListener(NetStatusEvent.NET_STATUS, conHandler);
netCon.connect("rtmfp:");
}
/** Post a message */
public function post(txt:*):void {
var data:Object = new Object();
data["txt"] = txt;
data["id"] = new Date().time;
netGroup.post(data);
}
/** Handle connection event listener */
private function conHandler(e:NetStatusEvent):void {
if(e.info["code"] == "NetConnection.Connect.Success") {
setupGroup();
}
}
/** Connect to group */
private function setupGroup():void {
var groupSpec:GroupSpecifier = new GroupSpecifier(groupName);
groupSpec.postingEnabled = true;
groupSpec.ipMulticastMemberUpdatesEnabled = true;
groupSpec.addIPMulticastAddress("225.225.0.1:30000");
netGroup = new NetGroup(netCon, groupSpec.groupspecWithAuthorizations());
netGroup.addEventListener(NetStatusEvent.NET_STATUS, handler);
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
連接似乎是工作,因爲我可以發送消息和其他球員不接受他們..好..收到東西。
然後從我的Main.as我調用這個類是這樣的:
private var p2p:P2P;
public function Main():void {
p2p = new P2P("snakybo", netHandler);
p2p.addEventListener(Event.COMPLETE, onConnected);
}
private function onConnected(e:Event):void {
function send(e:KeyboardEvent):void {
c.post("a");
trace("poseted");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, send);
}
private function netHandler(e:NetStatusEvent):void {
switch(e.info["code"]) {
case "NetGroup.Posting.Notify":
trace("received: " + e.info["txt"]);
break;
}
}
另外,如果我補充一下:
case "NetGroup.Connection.Success":
trace("Connected to group");
break;
它永遠不會打印出。不知道有什麼問題。
我在這裏做錯了什麼嗎?或者我的電腦以某種方式阻止Flash Player?
感謝您對於@ E10的信息如何關於「groupSpec.addIPMulticastAddress(」225.225.0.1:30000「);」你還需要這些嗎? – sputn1k
只是測試它,它的工作原理正是我正在尋找..serverChannelEnabled等謝謝分配! – sputn1k
如果您有特定的服務器發送數據,或者您的防火牆過濾了UDP通信,則只需執行此操作。 – E10