はい。クライアントは、flash.net.Socket
(doc)またはflash.net.XMLSocket
(doc )を介してサーバーに接続する必要があります。ほとんどの場合、必要なサーバーは1つだけで、多くのクライアントが接続できます。両端にサーバーがある理由は完全には明らかではありませんか?
編集:
以下は、を使用してサーバーからのメッセージを継続的にリッスンしているクライアントの簡単な例ですSocket
。これはサーバーに接続し、データを(無期限に)待機します。データのチャンクが受信されると(この場合、文字列が改行文字で終了することを期待しています)、データはイベントとともに渡されます。
このアプローチを試しても成功しなかった場合は、エラーがあるかどうか、または接続が閉じられていないかどうかを確認する必要があります。
ドキュメントクラス:
package {
import flash.display.Sprite;
public class Main extends Sprite {
protected var socket:SocketTest;
public function Main() {
this.socket = new SocketTest();
this.socket.addEventListener(SocketMessageEvent.MESSAGE_RECEIVED, onSocketMessage);
this.socket.connect("127.0.0.1", 7001);
}
protected function onSocketMessage(e:SocketMessageEvent):void {
var date:Date = new Date();
trace(date.hoursUTC + ":" + date.minutesUTC + ":" + date.secondsUTC + " Incoming message: " + e.message);
}
}
}
SocketTestクラス:
package {
import flash.net.Socket;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.events.ProgressEvent;
import flash.errors.IOError;
public class SocketTest extends Socket {
protected var _message:String;
public function SocketTest() {
super();
this._message = "";
this.addEventListener(Event.CONNECT, socketConnected);
this.addEventListener(Event.CLOSE, socketClosed);
this.addEventListener(ProgressEvent.SOCKET_DATA, socketData);
this.addEventListener(IOErrorEvent.IO_ERROR, socketError);
this.addEventListener(SecurityErrorEvent.SECURITY_ERROR, socketError);
}
protected function socketData(event:ProgressEvent):void {
var str:String = readUTFBytes(bytesAvailable);
//For this example, look for \n as a message terminator
var messageParts:Array = str.split("\n");
//There could be multiple messages or a partial message,
//pass on complete messages and buffer any partial
for (var i = 0; i < messageParts.length; i++) {
this._message += messageParts[i];
if (i < messageParts.length - 1) {
this.notifyMessage(this._message);
this._message = "";
}
}
}
protected function notifyMessage(value:String):void {
this.dispatchEvent(new SocketMessageEvent(SocketMessageEvent.MESSAGE_RECEIVED, value));
}
protected function socketConnected(event:Event):void {
trace("Socket connected");
}
protected function socketClosed(event:Event):void {
trace("Connection was closed");
//TODO: Reconnect if needed
}
protected function socketError(event:Event):void {
trace("An error occurred:", event);
}
}
}
SocketMessageEventクラス:
package {
import flash.events.Event;
public class SocketMessageEvent extends Event {
public static const MESSAGE_RECEIVED:String = "messageReceived";
protected var _message:String;
public function SocketMessageEvent(type:String, message:String = "", bubbles:Boolean = false, cancelable:Boolean = false) {
super(type, bubbles, cancelable);
this._message = message;
}
public function get message():String {
return this._message;
}
}
}
テストとして、5秒ごとにメッセージを送信するようにサーバーを設定しました。これは、コンソールの出力です。
Socket connected
21:36:24 Incoming message: Message from server: 0
21:36:29 Incoming message: Message from server: 1
21:36:34 Incoming message: Message from server: 2
21:36:39 Incoming message: Message from server: 3
21:36:44 Incoming message: Message from server: 4
21:36:49 Incoming message: Message from server: 5