最近一直学习flash as3
今天跟着网上做了一个flash socket 聊天,主要了解下flash如何与java的socket通信。
一段代码CustomSocket.as
package
{
import flash.events.*;
import flash.net.Socket;
import flash.system.*;
import flash.utils.ByteArray;
import flash.utils.setTimeout;
import fl.controls.TextArea;
import fl.core.UIComponent;
/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/
public class CustomSocket
{
private const CR:int = 13; // Carriage Return (CR)
private const WILL:int = 0xFB; // 251 - WILL (option code)
private const WONT:int = 0xFC; // 252 - WON'T (option code)
private const DO:int = 0xFD; // 253 - DO (option code)
private const DONT:int = 0xFE; // 254 - DON'T (option code)
private const IAC:int = 0xFF; // 255 - Interpret as Command (IAC)
private var serverURL:String;
private var portNumber:int;
private var socket:Socket;
private var ta:TextArea;
private var state:int = 0;
System.useCodePage = false;
public function CustomSocket(server:String, port:int, output:TextArea)
{
serverURL = server;
portNumber = port;
ta = output;
socket = new Socket();
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(ErrorEvent.ERROR, errorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, dataHandler);
Security.loadPolicyFile("http://" + serverURL + ":" + portNumber + "/crossdomain.xml");
try
{
msg("Trying to connect to" + serverURL + ":" + portNumber + "\n");
socket.connect(serverURL,portNumber);
}
catch (error:Error)
{
msg(error.message + "\n");
socket.close();
}
}
public function ioErrorHandler(event:IOErrorEvent):void
{
msg("Unable to connect: socket error.\n");
}
public function writeBytesToSocket(ba:ByteArray):void {
trace(ba);
socket.writeBytes(ba);
socket.flush();
}
private function connectHandler(event:Event):void {
if (socket.connected) {
msg("connected...\n");
} else {
msg("unable to connect\n");
}
}
private function closeHandler(event:Event):void
{
msg("closed...\n");
}
private function errorHandler(event:ErrorEvent):void {
msg(event.text + "\n");
}
private function dataHandler(event:ProgressEvent):void {
var n:int = socket.bytesAvailable;
// Loop through each available byte returned from the socket connection.
while (--n >= 0) {
// Read next available byte.
var b:int = socket.readUnsignedByte();
switch (state) {
case 0:
// If the current byte is the "Interpret as Command" code, set the state to 1.
if (b == IAC) {
state = 1;
// Else, if the byte is not a carriage return, display the character using the msg() method.
} else if (b != CR) {
msg(String.fromCharCode(b));
}
break;
case 1:
// If the current byte is the "DO" code, set the state to 2.
if (b == DO) {
state = 2;
} else {
state = 0;
}
break;
// Blindly reject the option.
case 2:
/*
Write the "Interpret as Command" code, "WONT" code,
and current byte to the socket and send the contents
to the server by calling the flush() method.
*/
socket.writeByte(IAC);
socket.writeByte(WONT);
socket.writeByte(b);
socket.flush();
state = 0;
break;
}
}
}
private function msg(value:String):void {
ta.text += value;
ta.dispatchEvent(new Event(Event.CHANGE));
setTimeout(setScroll, 100);
}
public function setScroll():void {
ta.verticalScrollPosition = ta.maxVerticalScrollPosition;
}
}
}
这个as有的地方没有理解:初始化定义常量时,不知道为什么定义?希望有人能够解释下,小弟不胜感激。
下面还有个Main .as
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.ByteArray;
import CustomSocket;
public class Main extends Sprite
{
private var telnetClient:CustomSocket;
public function Main() {
setupUI();
}
private function connect(e:MouseEvent):void {
//建立socket通信的链接
telnetClient = new CustomSocket(serverName.text, int(portNumber.text), output);
}
private function sendCommand(e:MouseEvent):void {
var ba:ByteArray = new ByteArray();
//将得到的信息写入ba中
ba.writeMultiByte(command.text + "\n", "GBK");
//通过连接写入socket中
telnetClient.writeBytesToSocket(ba);
command.text = "";
}
private function setupUI():void {
loginBtn.addEventListener(MouseEvent.CLICK,connect)
sendBtn.addEventListener(MouseEvent.CLICK,sendCommand);
}
}
}
最后看看java服务器端
代码一:
简单的MyServer .java
package com.cn.socket;
import java.io.*;
import java.net.*;
public class MyServer
{
public static void main (String[] args) throws IOException
{
ServerSocket server=new ServerSocket(4567);
Socket client=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true)
{
String str=in.readLine();
System.out.println(str);
out.println("你 说: " + str + "\n");
out.flush();
if(str.equals("end"))
break;
}
client.close();
}
}
这个服务器端只能连接一段时间后自动停止。
服务器端代码二:
package com.cn.socket;
import java.io.IOException;
import java.net.*;
import java.util.concurrent.*;
public class MultiThreadServer {
private int port=4567;
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private final int POOL_SIZE=10;//单个CPU线程池大小
public MultiThreadServer() throws IOException{
serverSocket=new ServerSocket(port);
//Runtime的availableProcessor()方法返回当前系统的CPU数目.
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("服务器启动");
}
public void service(){
while(true){
Socket socket=null;
try {
//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket=serverSocket.accept();
executorService.execute(new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
}
}
package com.cn.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.*;
public class Handler implements Runnable{
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn=socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public String echo(String msg){
return "echo:"+msg;
}
public void run(){
try {
System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
BufferedReader br=getReader(socket);
PrintWriter pw=getWriter(socket);
String msg=null;
while((msg=br.readLine())!=null){
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye"))
break;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器二建立了线程数量,并且可以不断进行端口连接。
这两中服务器选其一就ok。
as3的技术很差,只是为了学习进步。
分享到:
相关推荐
标题中的“flash as3/java socket 聊天室”指的是使用Adobe Flash ActionScript 3(AS3)语言和Java的Socket编程技术实现的一个在线聊天应用程序。这个应用允许用户通过网络进行实时通信,创建一个基本的聊天环境。...
【标题】"基于Socket的as3的小型聊天室"是一个使用ActionScript 3(AS3)编程语言开发的网络通信应用实例,它构建了一个简单的聊天室客户端。在互联网编程中,Socket是实现客户端与服务器之间实时通信的基础技术,它...
在本项目中,“ActionScript简单的Socket聊天室系统”是利用ActionScript 3.0(AS3.0)构建的一个基本的网络通信应用。这个系统依赖于Adobe Integrated Runtime (AIR) 来运行服务端,AIR允许开发人员创建桌面应用...
1. **实时通信协议**:Flash AS3可以利用Socket或XMLSocket类实现实时双向通信。通过与服务器建立TCP连接,客户端和服务器之间可以交换数据,实现即时消息传递。 2. **内存数据管理**:聊天信息在服务器端和客户端...
【标题】"FLASH局域网免服务器P2P聊天室源码(as3+flash开发)" 涉及的核心技术主要包括ActionScript 3 (AS3)、P2P(点对点)通信以及局域网应用的开发。AS3是Adobe Flash Player支持的编程语言,用于创建交互式的...
本文将深入探讨如何使用C#语言构建一个基于Flash Socket的服务器,以及AS3.0(ActionScript 3.0)在客户端的应用。 Flash Socket,也被称为“高级Socket”,是Flash Player提供的一个特性,允许Flash应用程序直接与...
1. `.actionScriptProperties`:这是Flash Builder或Flex Builder项目中的配置文件,包含了AS3项目的特定设置,如编译选项、库路径等。 2. `.flexProperties`:与`.actionScriptProperties`类似,也是项目配置文件,...
总的来说,AS3中的Socket技术提供了强大的网络通信功能,允许开发者构建实时的、数据密集型的应用程序,如在线游戏、聊天室或数据传输服务。然而,正确处理连接、数据交换和错误是确保程序稳定运行的关键。在实际...
在AS3中,Socket类提供了一个与服务器进行双向通信的通道,这在创建实时互动的Flash应用时非常有用,如在线游戏、实时聊天或数据传输等。 标题"(AS3)socket+客户端与服务端+实例"指出我们将讨论如何使用AS3的...
AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建互动内容、富互联网应用程序(RIA)、桌面应用程序以及移动应用程序。在这个“as3简单的聊天窗体组件”项目中,我们可以推测它是一个使用AS3...
【标题】"AS3 + FMS3聊天室"是一个基于ActionScript 3(AS3)编程语言和Flash Media Server 3(FMS3)技术构建的在线聊天室应用。这个项目提供了一个简单但实用的平台,让多个用户可以实时交流分享信息。 【描述】...
本示例"多个flash互相通信demo"探讨了如何利用AS3进行Socket编程,实现多个Flash实例之间的通信。 1. **Flash AS3基础知识**:AS3是ActionScript语言的第三个主要版本,引入了许多改进,包括类型检查、更好的错误...
FlashSocket,全称Adobe Flash Socket,是Adobe Flash Player支持的一种高级网络功能,它允许Flash应用程序(SWF)直接与服务器进行低级TCP/IP通信。传统Web应用基于HTTP协议,而HTTP是无状态的,不适合持续的双向...
Socket类提供了双向数据流,允许应用程序发送和接收原始字节流,这使得它非常适合实时数据交换,如游戏、聊天应用或任何需要高效数据传输的场景。本篇文章将深入探讨如何使用AS Socket进行后台通信,以及涉及的主要...
本知识点将深入讲解使用AS3(ActionScript 3)实现的Flash Socket以及HTTP分块下载的原理和源码分析。 首先,AS3是Adobe Flash Player和Air平台支持的编程语言,主要用于创建富互联网应用(RIA)。Socket编程是AS3...
1. **客户端**:由AS3编写,展示聊天界面,处理用户输入,通过Socket连接与服务器通信。 2. **服务器端**:PHP脚本运行在Web服务器上,接收和响应客户端请求,处理数据交互,可能还包括与数据库的交互。 3. **...
利用socket开发的简单flash聊天室,后台使用c#开发socket服务器,例子比较简单,只是实现了socket与flash通信,相信大家会有启发。 资源内容: c#源程序和已经发布了的服务器: as3.0 测试源程序,
`SocketExample.as`是AS3(ActionScript 3)代码,AS3是Flash Professional和Flash Builder等工具使用的编程语言。在这个例子中,AS3代码可能包含了建立Socket连接、发送数据到服务器、接收服务器返回数据的逻辑。...
在Flash中,ActionScript(AS)是主要的编程语言,AS3是其最新的版本,提供了面向对象的编程模型,具有更高效、更严谨的语法结构。 二、Flash中的网络通信——Socket和XMLSocket Flash版在线聊天系统的核心功能是...
AS3(ActionScript 3)是Adobe Flash Platform的主要编程语言,用于创建互动式网页内容、游戏和动画。在这个“不错的AS3聊天框实例”中,我们可以深入探讨如何使用AS3来构建一个基本的聊天应用程序。Flash.text是AS3...