在as2.0 已經有關於Socket 相關的編程,到了3.0後新增了Socket類,可以更加強大的進行Socket相關的編程,只是有一點Flash 還沒有達到可以自己編寫伺服器相關的類,那隻好藉助java 的Socket 編寫一個簡單的通訊方式。一個下午的學習初步有一點反應了 。開始的時候用java 來編寫一個用戶端與伺服器端 做一簡單的通訊效果,然後可以藉助那個伺服器端來進行簡單的通訊測試。
主類:
import java.lang.*;
import java.net.*;
public class MainServer{
public static void main(String[] args)
{
try{
ServerSocket ss=new ServerSocket(2900);
boolean begin=true;
while(begin)
{
System.out.println("等待串連");
Socket mysocket=ss.accept();
System.out.println("串連成功");
Thread td=new Thread(new MyServer2(mysocket));
td.start();
}
}
catch(Exception ex){
System.err.println(ex);
}
}
}
//使用介面來使用線程
import java.lang.*;
import java.net.*;
import java.io.*;
public class MyServer2 implements Runnable{
private Socket connection=null;
public MyServer2(Socket mysocket)
{
this.connection=mysocket;
}
public void run()
{
PrintWriter pw=null;
//Socket connection=null;
try{
// ServerSocket ss=new ServerSocket(8000);
//connection=ss.accept();//一直阻塞,直到有串連就中斷並返回一個socket對象,這樣知道那個socket連伺服器
BufferedReader userIn=new BufferedReader(new InputStreamReader(System.in));//伺服器從鍵盤上讀取資料到緩衝區
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); //讀取socket的裡面資訊
pw=new PrintWriter(connection.getOutputStream());
while(true)
{
String strline =br.readLine();//讀取socket的資料
System.out.println(strline);
String word=userIn.readLine();
pw.println(word);
pw.flush();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
try
{
if(connection!=null)
connection.close();
}
catch(IOException ex){
}
}
}
}
//Flash 當中的代碼
package {
import flash.net.Socket;
import flash.events.*;
import flash.display.Sprite;
import flash.errors.*;
public class MyClient extends Sprite {
private var mysocket:Socket;
public function MyClient() {
mysocket=new Socket();
mysocket.addEventListener(Event.CONNECT,OnConnect);
mysocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
mysocket.connect("localhost",2900);
}
private function OnConnect(e:Event):void {
trace("串連成功");
mysocket.writeMultiByte("Test successful","unicode");
mysocket.flush();
}
private function ioErrorHandler(e:Event):void{
trace("串連失敗");
}
}
}
問題:當我開了防火牆的時候,測試Flash 能否與java進行Socket通訊的時候,發現一直都不可以串連,當關閉的時候可以串連。不知道是否防火牆在進行串連的時候劫攔了Socket發送的資料包。
問題2:java 程式回應時間慢,使用了線程後不知道是否出了點問題。
問題3:關於Socket方面的編程一直是比較少,很多時候不知道應用在什麼方面?能否知道一個交流版呢、?
問題5:如果使用java 的非阻塞io 實現提高更加有效效能。如果是一百個Flash客服端,那該怎樣才可以實現到伺服器效能的提高呢?這個是一個考慮到問題
問題6:關於使用java 的io 流 痛點和重點是什嗎?