blogspot.com-GA4

星期四, 11月 26, 2009

Flex 幾個簡單的使用方法


1. 彈出訊息簡單用
import mx.controls.Alert;

..........

Alert.show("連線錯誤,請重新進入!!");

2. 讀取外部 as檔案

<mx:Script source="ActionScript檔案">

星期一, 11月 16, 2009

Flash Media Server

Flash Media Server
是影音串流伺服器,主要負責在聲音、影像等的串流,更多詳細請看

影音聊天室
技術白皮書

星期四, 11月 12, 2009

(轉)javaMail編碼

javaMail編碼 2007-03-05 下午 09:15

郵件頭(參見RFC822,RFC2047)只能包含US-ASCII字元。郵件頭中任何包含
非US-ASCII字元的部分必須進行編碼,使其只包含US- ASCII字元。所以使用
java mail發送中文郵件必須經過編碼,否則別人收到你的郵件只能是亂碼一堆。
不過使用java mail 包的解決方法 很簡單,用它自帶的MimeUtility工具中encode
開頭的方法(如encodeText)對中文資訊進行編碼就可以了。

例子:

MimeMessage mimeMsg = new MimeMessage(mailSession);

//讓javamail決定用什?方式來編碼 ,編碼內容的字元集是系統字元集
mimeMsg.setSubject( MimeUtility.encodeText( Subject) );

//使用指定的base64方式編碼,並指定編碼內容的字元集是gb2312

mimeMsg.setSubject( MimeUtility.encodeText( Subject,"gb2312","B"));

通常對郵件頭的編碼方式有2種,一種是base64方式編碼,一種是QP
(quoted-printable)方式編碼,javamail根據具體情況來選擇編碼方式。

如"txt測試”編碼後內容如下:

=?GBK?Q?Txt=B2=E2=CA=D4

裏面有個=?GBK?Q?,GBK表示的是內容的字元集,?Q?表示的是以QP方式編
碼的,後面緊跟的才是編碼後的中文字元。所以用MimeUtility工具編碼後的資
訊裏包含了編碼方式的資訊。

郵件的正文也要進行編碼,但它不能用MimeUtility裏的方法來編碼。郵件正文
的編碼方式的資訊是要放在Content-Transfer- Encoding這個郵件頭參數中的,而
MimeUtility裏面的方法是將編碼方式的資訊放在編碼後的正文內容中。所以如
果你對正文也用 MimeUtility進行處理,那?其他郵件程式就不會正常顯示你編
碼的郵件,因?其他郵件軟體如outlook,foxmail只會根據
Content-Transfer-Encoding這個裏面的資訊來對郵件正文進行解碼。

其實,郵件正文部分的編碼javamail已經自動幫你做了,當你發送郵件的時候,
它會自己決定編碼方式,並把編碼方式的資訊放入Content- Transfer-Encoding這
個郵件頭參數中,然後再發送。所以你所要做的就是直接把郵件正文的內容放入
郵件中就可以了。

對郵件正文的編碼方式比較多,包括了base64和QP方式,還有一些如7bit,8bit
等等,因?javamail自動?郵件正文編碼,所以我就不一一祥敘了。

例子:

//處理郵件正文

MimeBodyPart mbp=new MimeBodyPart();
if ( ContentType() == null || ContentType.equals(""))
mbp.setText( Content );
else
mbp.setContent( Content, Content );

解碼


javamail包中的MimeUtility工具中也提供了對郵件資訊解碼的方法,都是以
decode開頭的一些方法(如decodeText)

例子:

String Subject = mimemsg.getSubject();
String ChSubject = MimeUtility.decodeText(Subject);

對於base64和QP編碼後資訊,decode* 方法能將他們正確的解碼,但是,如果
指定的字元集不對,那?javamail就會出現錯誤,不能正確地將其解碼。

如有的郵件系統將”txt測試”編碼後如下:

=?x-unkown?Q?Txt=B2=E2=CA=D4

這裏指定的字元集是x-unknown,是非明確的字元集,javamail就不能正確的處
理了,但是”測試”這兩個中文字還是按照gbk字元集編碼的,所以你可以手工
的將編碼方式資訊改正確,再用decode*方法來解碼。

例子:

if ( str.indexOf("=?x-unknown?") >=0 ){
str = str.replaceAll("x-unknown","gbk" ); // 將編碼方式的資訊由x-unkown改?
gbk

try{

str = MimeUtility.decodeText( str ); //再重新解碼

}catch( Exception e1){

return str ;

}

decode*方法都是根據在編碼資訊中包含的編碼方式的資訊來解碼,所以decode*
方法對郵件正文解碼是無效的,因?郵件正文中不包含編碼方式的資訊。

同編碼一樣,郵件正文的解碼也是由javamail做了。Javamail根據
Content-Transfer-Encoding裏的資訊,來對郵件的正文解碼。

客戶程式從javamail取得的正文內容字元集?iso-8859-1,所以還要將字元集轉換
一下,例:

String CorrectContent = new String( Content.getbytes("iso-8859-1"),"gb2312");

CorrentContent?正確的郵件正文了

星期三, 11月 11, 2009

(轉)Server端與Client端method觸發與data廣播概念 by ozzysun

不相關連結設定
將檔案物件用於隨選視訊及 MP3 播放


今天看到的文章 先收著 2005年很舊了不過server用的actionscript 不知道能不能用上

前陣子在站上post的文章,音系統問題,再post一次
Server端與Client端method觸發與data廣播概念 by ozzysun

在FCS的應用上常會需要讓Client與Server間的資料傳遞與method呼叫,以下幾點概念應該可以
避免呼叫method沒反應或資料沒傳到你要的地方等狀況發生。

一.Server端method如何被呼叫

Server端上要能讓Client所呼叫觸發的function,需定義在Server端的Client物件上你可以用
prototype方式去extend原本Client類別的method,讓Client類別所產生的instance都擁有該
method。
例:

Client.prototype.newfun=function(){}

你也可以把這function定義在單一Client instance下,
例:
application.onConnect(newClient)=function(){
.....
newClient.newfun=function(){}
}

二.Client端的method如何被呼叫
在Client端上要讓Server端可以呼叫的function,一定要定義在Netconnection上。
例:

nc=new NetConnection();
.....
nc.myfun=function(){}

三.send或call這兩個method在使用上有何差異?如何使用
call:這method在Client端上可使用的是netconnection物件,在Server端上可使用的是
netconnection與Client物件
1.在Client端利用netconnection.call來觸發執行Server端上Client 物件的method。
2.在Server端上利用Client物件.call來觸發Client端上netconnection上的method。
3.在Server端上使用netconnection.call時,這時這server的角色就像一個client端一樣
,是在觸發另一個Server端上Client 物件的method。
send:在Client端上可使用這method的包含SharedObject與netStream
send這個method很有趣,他讓你由client端去啟動所有同在client端的function,但因為
在觸發function時可以帶參數過去,這個特性是可以讓你利用來做小量資料的廣播的,要
廣播給所有人接收到的資料,並不一定就要放在SharedObject內,利用其onSync來做同步
,有時用send也是一個很簡單的做法,如何定義
1.在netStream或SharedObject上定義好method "myfun"
2.利用netStream.send("myfun")或sharedobject.send("myfun",myvar)可讓所有client
上的"myfun"都會被觸發

四.幾種可能的互動型態範例
1.Client端對Server端傳送data或呼叫執行Server端function

應用範例:一個簡易聊天室,聊天內容只存在Server端的變數內,不使用SharedObject存放呼
叫Server端的message這method來處理client傳上去的msg這對話內容

Client端:
nc.call("message", null, msg);
Server端:
application.onAppstart=function(){
application.chat_content="";
}
application.onConnect=function(newClient){
.......
newClient.message=function(msg){
application.chat_content+=msg;
}
}

2.Client端對所有Client廣播data並執行指定Client端function
應用範例:以之前在站上回覆過的問題為例,一個clinet要輸入一個網址url_txt,要讓所有的
client都會開啟這網址的網頁
Client端:
先定義一個附掛在so上的method
lobby_so.openPage=function(receive_url){
getURL(receive_url);
}
利用send就可讓所有client接收到這網址並開啟
lobby_so.send("openPage",url_txt);

3.Server傳送data給特定Client
應用範例:當有使用者連線上server,當使用者資料驗證正確時,接受其連線,一方面要client
去執行指定的function跳到某頁或讓某mc出現...,同時又要把server端的資料帶過去
說明:server只回應正在與server做互動的那個client,如以上範例,server只會去觸發請求
連線的該client去執行指定的function,其他client不會有反應

Server端:
application.onConnect=function(newClient,pwd){
if(pwd=="ok"){
application.acceptConnection(newClient);
newClient.call("get_message",null,message);
}else{
application.rejectConnection(newClient,errObj);
}
}
Client端:
........
nc.get_message=function(message){};

4.Server廣播data給所有Client

應用範例:當有人斷線時,由server端廣播所有client,讓所有client都能同步更新client名單
說明:以上範例來說,當clinet無預警的斷線,只有Server上的application.onDisconnect 這handler
會被觸發,也就是說你需要在這handler內寫一些程式去廣播通知給所有的client。
如何廣播?有以下兩種做法
1.把資料放在remote SharedObject物件內,只要SO物件內容更動,即自動觸發Client端的so.onSync
將線上人員名單寫在remote SharedObject物件內,當有人斷線,只要把so內該筆資料剔除掉,因為
so內容改變,因此所有Client端的so.onSync 這handler將被觸發,即可達到你要更新資料的目的。

Server端
application.onDisconnect=function(newClient){
userlist_so.setProperty(newClient.name,"");
}

註:相對的當server端無預警的斷線,client端可由nc.onStatus這handler內由判斷info.code來取
得資訊
2.當資料不是存在so內時,只是存在server端的一個變數上,可以善加利用application.clients來對
所有client廣播。以下會觸發所有client端上的client_fun,並把server上的sendvar變數帶過去

server端:
application.onDisconnect=function(newClient){
for(var i=0;i<application.clients.length;i++) {
application.clients[i].call("client_fun",null,sendvar);
}
}
Client端:
nc.client_fun=function(myvar){ }

server.xml 修改頁面傳值 中文問題

在tomcat 5.5 設定中加入已下設定
在server.xml 中尋找以下字串
加入 URIEncoding="Big5"

< Connector port="80" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="Big5" />

星期一, 11月 09, 2009

native2ascii用法

native2ascii是sun java sdk提供的一個工具。用來將別的文本類文件(比如*.txt,*.ini,*.properties,*.java等等)編碼轉爲Unicode編碼。爲什麽要進行轉碼,原因在於程式的國際化。

用法:native2ascii [-reverse] [-encoding 編碼] [輸入文件 [輸出文件]]

-[options]:表示命令開關,有兩個選項可供選擇
-reverse:將Unicode編碼轉爲本地或者指定編碼,不指定編碼情況下,將轉爲本地編碼。
-encoding encoding_name:轉換爲指定編碼,encoding_name爲編碼名稱。
[inputfile [outputfile]]
inputfile:表示輸入文件全名。
outputfile:輸出檔案名。如果缺少此參數,將輸出到控制臺