.
创建一个 as3 文档 作为客户端
F9 动作面板代码如下
.
var isReadHead:Boolean;
var messageLen:int;
var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, linkFn);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataFn);
socket.connect("127.0.0.1", 8888);
function linkFn(e:Event):void
{
trace(e);
.
trace("连上服务器");
trace("发送 aa bb 到服务器");
.
send({aa:66,bb:true});
}
function dataFn(e:ProgressEvent):void
{
read();
}
function read():void
{
if (! isReadHead && socket.bytesAvailable > 4)
{
var lenByte:ByteArray = new ByteArray();
socket.readBytes(lenByte, 0, 4);
messageLen = lenByte.readInt();
isReadHead = true;
}
if (isReadHead && socket.bytesAvailable >= messageLen)
{
var msgByte:ByteArray = new ByteArray();
socket.readBytes(msgByte, 0, messageLen);
isReadHead = false;
var json:String = msgByte.readUTFBytes(msgByte.length);
var oo:Object = JSON.parse(json);
.
trace("服务器传过来的数据");
trace(oo.aa,oo.bb);
.
if (socket.bytesAvailable > 4)
{
read();
}
}
}
function send(obj:Object):Boolean
{
if (socket.connected)
{
var json:String = JSON.stringify(obj);
var byte:ByteArray=new ByteArray();
byte.writeUTFBytes(json);
var msgByte:ByteArray = new ByteArray();
msgByte.writeInt(byte.length);
msgByte.writeBytes(byte, 0, byte.length);
socket.writeBytes(msgByte);
socket.flush();
return true;
}
else
{
return false;
}
}
.
创建一个 as3 air 项目 作为服务端
F9 动作面板代码如下
.
var clients:Vector.<Socket> = new Vector.<Socket>();
var server:ServerSocket = new ServerSocket();
server.bind(8888, "127.0.0.1");
server.addEventListener(ServerSocketConnectEvent.CONNECT, linkFn);
server.listen();
function linkFn(e:ServerSocketConnectEvent):void
{
var socket:Socket = e.socket;
clients.push(socket);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataFn);
socket.addEventListener(Event.CLOSE, closeFn);
}
function dataFn(e:ProgressEvent):void
{
var socket:Socket = e.currentTarget as Socket;
var byte:ByteArray = new ByteArray();
while (socket.bytesAvailable)
{
socket.readBytes(byte, 0, socket.bytesAvailable);
}
send(byte);
}
function send(byte:ByteArray):void
{
for each (var client:Socket in clients)
{
client.writeBytes(byte, 0, byte.length);
client.flush();
}
}
function closeFn(e:Event):void
{
var i:int;
while (i<clients.length)
{
if (clients[i] == e.currentTarget)
{
clients.splice(i,1);
}
i++;
}
e.currentTarget.removeEventListener(ProgressEvent.SOCKET_DATA, dataFn);
e.currentTarget.removeEventListener(Event.CLOSE, closeFn);
}
.
服务端 air 发布 .exe
先运行 服务端 exe
再运行客户端
.
效果如下
.

.
可以看到,获取到了服务器传过来的数据
.
as3 Socket 客户端 api
https://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/Socket.html
.
as3 ServerSocket 服务器 api
https://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/ServerSocket.html
.
参考
.
使用AS3 ServerSocket和Socket连接两个客户端
https://cloud.tencent.com/developer/ask/sof/101551645
.
AS3与JAVA、Netty Socket AMF通信 粘包处理
https://blog.csdn.net/weixin_34413065/article/details/91656830
.
创建一个 as3 文档 作为客户端
F9 动作面板代码如下
.
var isReadHead:Boolean;
var messageLen:int;
var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, linkFn);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataFn);
socket.connect("127.0.0.1", 8888);
function linkFn(e:Event):void
{
trace(e);
.
trace("连上服务器");
trace("发送 aa bb 到服务器");
.
send({aa:66,bb:true});
}
function dataFn(e:ProgressEvent):void
{
read();
}
function read():void
{
if (! isReadHead && socket.bytesAvailable > 4)
{
var lenByte:ByteArray = new ByteArray();
socket.readBytes(lenByte, 0, 4);
messageLen = lenByte.readInt();
isReadHead = true;
}
if (isReadHead && socket.bytesAvailable >= messageLen)
{
var msgByte:ByteArray = new ByteArray();
socket.readBytes(msgByte, 0, messageLen);
isReadHead = false;
var json:String = msgByte.readUTFBytes(msgByte.length);
var oo:Object = JSON.parse(json);
.
trace("服务器传过来的数据");
trace(oo.aa,oo.bb);
.
if (socket.bytesAvailable > 4)
{
read();
}
}
}
function send(obj:Object):Boolean
{
if (socket.connected)
{
var json:String = JSON.stringify(obj);
var byte:ByteArray=new ByteArray();
byte.writeUTFBytes(json);
var msgByte:ByteArray = new ByteArray();
msgByte.writeInt(byte.length);
msgByte.writeBytes(byte, 0, byte.length);
socket.writeBytes(msgByte);
socket.flush();
return true;
}
else
{
return false;
}
}
.
创建一个 as3 air 项目 作为服务端
F9 动作面板代码如下
.
var clients:Vector.<Socket> = new Vector.<Socket>();
var server:ServerSocket = new ServerSocket();
server.bind(8888, "127.0.0.1");
server.addEventListener(ServerSocketConnectEvent.CONNECT, linkFn);
server.listen();
function linkFn(e:ServerSocketConnectEvent):void
{
var socket:Socket = e.socket;
clients.push(socket);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataFn);
socket.addEventListener(Event.CLOSE, closeFn);
}
function dataFn(e:ProgressEvent):void
{
var socket:Socket = e.currentTarget as Socket;
var byte:ByteArray = new ByteArray();
while (socket.bytesAvailable)
{
socket.readBytes(byte, 0, socket.bytesAvailable);
}
send(byte);
}
function send(byte:ByteArray):void
{
for each (var client:Socket in clients)
{
client.writeBytes(byte, 0, byte.length);
client.flush();
}
}
function closeFn(e:Event):void
{
var i:int;
while (i<clients.length)
{
if (clients[i] == e.currentTarget)
{
clients.splice(i,1);
}
i++;
}
e.currentTarget.removeEventListener(ProgressEvent.SOCKET_DATA, dataFn);
e.currentTarget.removeEventListener(Event.CLOSE, closeFn);
}
.
服务端 air 发布 .exe
先运行 服务端 exe
再运行客户端
.
效果如下
.

.
可以看到,获取到了服务器传过来的数据
.
as3 Socket 客户端 api
https://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/Socket.html
.
as3 ServerSocket 服务器 api
https://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/ServerSocket.html
.
参考
.
使用AS3 ServerSocket和Socket连接两个客户端
https://cloud.tencent.com/developer/ask/sof/101551645
.
AS3与JAVA、Netty Socket AMF通信 粘包处理
https://blog.csdn.net/weixin_34413065/article/details/91656830
.