In general, the use of flash to call. NET components requires remote calls. In fact, we can also directly communicate through socket.
The specific format is flash amf3 or afm0, and popularFluorinefxThe specific code of the server component is as follows:
Based on this usage, you can develop a. Net socket server for web games or other flash applications.
Using system;
Using system. Collections. Generic;
Using system. Collections. Specialized;
Using system. text;
Using system. Threading;
Using system. net. Sockets;
Using system. net;
Using system. runtime. serialization;
Using system. runtime. serialization. formatters. Binary;
Using system. IO;
Using fluorinefx;
Namespace stcserver
{
Class Monitor
{
Private int Port = 8888;
Private const int maxpksize = 4096;
Private tcplistener tcpls = NULL;
Private list <client> clients = new list <client> ();
Public void close ()
{
If (tcpls! = NULL)
{
Tcpls. Stop ();
}
If (clients. Count! = 0)
{
Foreach (client C in clients)
{
C. Sock. Shutdown (socketshutdown. Both );
C. thread. Abort ();
}
Clients. Clear ();
Clients = NULL;
}
}
Private void threadfunc (Object client)
{
Client Ct = client as client;
Socket Sk = CT. Sock;
Byte [] cmdbuff = new byte [maxpksize];
While (true)
{
Try
{
Cmdbuff. initialize ();
Int n = Sk. Receive (cmdbuff );
Console. writeline (datetime. Now. tostring () + ": Data received successfully. Length:" + n );
System. Io. memorystream MS = new system. Io. memorystream (cmdbuff, 0, N );
Fluorinefx. amf3.bytearray BA = new fluorinefx. amf3.bytearray (MS );
Node o = (node) Ba. readobject ();
Console. writeline (O. ID );
Console. writeline (O. Name );
Console. writeline (O. Address );
O. Name = "James ";
Node node = new node ();
Node. ID = O. ID;
Node. Name = O. Name;
Node. Address = O. address;
Fluorinefx. amf3.bytearray result = new fluorinefx. amf3.bytearray ();
Result. writeobject (node );
Byte [] Buf = new byte [result. Length];
Result. Position = 0;
Result. readbytes (BUF, (uint) 0, (uint) BUF. Length );
Foreach (client CL in clients)
{
Cl. Sock. Send (BUF, Buf. length, socketflags. None );
}
}
Catch (exception E)
{
Console. writeline ("Network Termination:" + E. Message );
Ct. Sock. Shutdown (socketshutdown. Both );
Clients. Remove (CT );
Thread. currentthread. Abort ();
Ct = NULL;
}
}
}
Public void startup ()
{
IPaddress IP = DNS. gethostaddresses (DNS. gethostname () [0];
Tcpls = new tcplistener (IP, Port );
Tcpls. Start ();
While (true)
{
Byte [] packetbuff = new byte [maxpksize];
Console. writeline ("the server is started and listening.../N ");
Console. writeline (string. Format ("Server IP: {0}/T port: {1}/N", IP, Port ));
Socket Sk = tcpls. acceptsocket ();
Console. writeline ("connected, receiving data.../N ");
Thread CTH = new thread (New parameterizedthreadstart (threadfunc ));
Client Cl = new client (SK, Cth );
Clients. Add (CL );
CTH. Start (CL );
}
}
}
}
Namespace stcserver
{
Class Client
{
Public socket sock = NULL;
Public thread = NULL;
Public client (socket S, thread th)
{
Sock = s;
Thread = th;
}
}
}
Namespace stcserver
{
Public class Node
{
Public uint ID;
Public string name;
Public String address;
}
}
Flash (Flex) client:
Package
{
Import flash. Events .*;
Import flash.net. objectencoding;
Import flash.net. Socket;
Import flash.net. registerclassalias;
Import flash. utils. bytearray;
Public class greeter
{
Private var socket: socket;
Public Function sayhello (): void
{
Registerclassalias ("stcserver. node", node );
Socket = new socket ();
Socket. addeventlistener (event. Connect, onhandler );
Socket. addeventlistener (progressevent. socket_data, onhandler );
Socket. objectencoding = objectencoding. amf3;
Socket. Connect ("192.168.1.14", 8888 );
VaR node: node = new node ();
Node. ID = 122;
Node. Name = "User Name ";
Node. Address = "kkkkkkk ";
VaR num: number;
Trace (Num );
VaR arr: bytearray = new bytearray;
Arr. writeobject (node );
Arr. Compress ();
Socket. writebytes (ARR );
Socket. Flush ();
}
Public Function onhandler (Event: Event): void
{
Switch (event. Type ){
Case progressevent. socket_data:
Trace (new date ());
Trace ("data accepted ");
VaR Bytes: bytearray = new bytearray ();
Socket. readbytes (bytes );
Bytes. uncompress ();
VaR node: node;
Node = node (bytes. readobject ());
Trace (node. Name );
Trace (node. ID );
Trace (node. Address );
Break;
Case event. close:
Trace ("Connection closed ");
Break;
Case event. Connect:
Trace ("Connect connector ..");
Break;
Case ioerrorevent. io_error:
Case securityerrorevent. security_error:
Trace ("connection failed ");
Break;
}
}
}
}
Package
{
Public class Node
{
Public var ID: uint;
Public var name: string;
Public var address: string;
Public Function node ()
{
}
}
}
<? XML version = "1.0" encoding = "UTF-8"?>
<Mx: Application xmlns: MX = "http://www.adobe.com/2006/mxml" xmlns = "*"
Layout = "vertical"
Creationcomplete = "initapp ()">
<Mx: SCRIPT>
<! [CDATA [
Private var mygreeter: greeter = new greeter ();
Public Function initapp (): void
{
// Says hello at the start, and asks for the user's name
Maintxt. Text = mygreeter. sayhello ();
}
]>
</MX: SCRIPT>
<Mx: textarea id = "maintxt" width = "400"/>
</MX: Application>