Socket(套接字技術)是一種簡單而易學的技術,尤其在當前像java這樣面向網(wǎng)絡,面向商業(yè)開發(fā)的語言的支持下,實現(xiàn)起來是相當方便的。
Flash大家都知道,在網(wǎng)絡圖像,動畫的傳輸上有著獨天得厚的優(yōu)厚優(yōu)勢,F(xiàn)lash player及其插件的高普及率。再加上一個十分強大的OO型的腳本AS2,以及它的失量圖形系統(tǒng),swf跨平臺等優(yōu)點。在短期內恐怕難有對手可以與之抗衡,而且有發(fā)展的越來越好的趨勢。
但是,F(xiàn)lash的功能究竟還是有極限的。比如,隨意的讀寫文件等基本的應用程序應有的功能都無法實現(xiàn)。在應對大規(guī)模的數(shù)據(jù)輸入的時候,用Flash比較“偏”的數(shù)據(jù)庫存取系統(tǒng)無論是開發(fā)效率和運行效率都難以有保證。
而現(xiàn)在主流的商業(yè)化,網(wǎng)絡化的OO技術,如JAVA等,在處理后臺數(shù)據(jù)要事物方面可是拿手絕活。所以,假如能利用Java等主語言寫的程序來處理數(shù)據(jù),通過數(shù)據(jù)間的傳遞補,讓Flash在前能做一個展示級的平臺的功能,一定可以讓你開發(fā)出前所未有的,無論在外還是在內都堪稱一流的直接面向網(wǎng)絡的軟件。
今天我做的嘗試有些人也已做過了,不過我這里是拿自己嘗試的體驗與大家一起來分享一下:
1.首先要知道一件事,就是能不能做的問題的,Java自不必說了。Flash方面,主要是有一個xmlSocket類,可以用來與建成服務器的應用軟件通訊.通訊的形式有兩面種,一種是用xml節(jié)點信息,比如說這樣:
在xml技術被廣泛應用的今天,這種格式更有生命力,xml在j2ee級別的應用里可以經常看到.
還有一種是相對簡單的,直接傳字符串.在小規(guī)模的程序里會比較實用.
當然啦,說到底傳的都是字節(jié)流.
在用以上兩種方式傳輸?shù)臅r候,請不要忘了,在Flash和Java端,都要加上字節(jié)流的終止符:
Flash傳給Java程序做的服務器端的信息,未尾加”/n”.
Java程序做的服務器端傳達室給Flash的信息,未尾加”/0”.
2傳完數(shù)據(jù)了,接下來就是解析了,在兩端都可以直接應用各自的字符串Api進行方便的處理。這里就不細談了。
下面簡單介紹一下我做的一個小Demo,通過Java發(fā)數(shù)據(jù)給Flash讓Flash中的一個小球從左向右移動:
import java.io.*;
import java.net.*;
public class mainServer
{
public static boolean sFlag;
public static void main(String args[])
{
try
{
ServerSocket server=null;
try
{
server=new ServerSocket(4700);
}
catch(Exception e)
{
System.out.
}
Socket socket=null;
try
{
System.out.println("Java Server Start:");
socket=server.accept();
System.out.println("client has connected/n");
}
catch(Exception e)
{
System.out.println("Error:"+e);
}
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//*correct get the input from the client
PrintWriter os=new PrintWriter(socket.getOutputStream()); /*correct make os the output to client*/
sFlag=true;
controlThread testController=new controlThread(os);
testController.start();//啟動控制線程.
while(sFlag)
{ ;
}
System.out.println("server ends sUCcessfully!/n");
is.close();
socket.close();
server.close();
}
catch(Exception e)
{
System.out.println("Error:"+e);
}
}
}
主程序相當簡單,建立Socket服務端,并啟動一個治理線程,那好,下面就來看這個治理線程:
import java.io.*;
public class controlThread extends Thread
{
private Point controlNode;
private PrintWriter outputStream;
public controlThread(PrintWriter inOutputStream)
{
outputStream=inOutputStream;//得到要寫回的數(shù)據(jù)的對象,這里是flash客戶端.
}
public void run()
{
controlNode=new Point(180,150);
for(int i=0;i<100;i++)
{
try
{
sleep(400);
}
catch(java.lang.InterruptedException e)
{
System.out.println(e);
}
controlNode.mx=180+i*2;
outputStream.println(controlNode.toString()+"/0");
outputStream.flush();
System.out.println(controlNode.toString());
}
mainServer.sFlag=false;
}
}
通來改變一個點結點的信息,傳給Flash中的對象,用sleep函數(shù)來達到一定的延時作用,達到控制Flash對象的功能.
結點類夠簡單:
class Point
{
public int mx;
public int my;
public Point(int inX,int inY)
{
mx=inX;
my=inY;
}
public String toString()
{
return new String(mx+","+my);
}
}
新聞熱點
疑難解答