- 浏览: 583245 次
文章分类
- 全部博客 (174)
- Core Java 学习 (6)
- Hibernate 学习 (3)
- Struts 学习 (3)
- Spring 学习 (9)
- EJB 学习 (0)
- 设计模式 (0)
- Oracle 学习 (6)
- JRuby (0)
- PHP (18)
- MySql (7)
- Apache (6)
- Informix (2)
- JSTL (1)
- CSS+HTML (8)
- Ajax (2)
- javaScript (16)
- reverse Ajax (1)
- Discuz (7)
- 网站 (11)
- SEO (5)
- Linux (4)
- ecshop (1)
- 电子商务 (1)
- 文档在线浏览 (18)
- 服务器技术 (10)
- flex (17)
- 用户体验 (1)
- java (1)
- flex+blazeDS (1)
- tomcat (1)
- 开发管理 (1)
最新评论
-
niaoqq1:
真坑爹,全是中文字符,复制全部报错!
<c:forEach 详解 -
jhys7s8jd:
pdf打印机下载http://www.onlinedown.n ...
命令行下转换word文档成PDF -
海豚12315:
flashPaper读取磁盘上的文件路径,
最好是放到某个系统 ...
在线文档阅读实现的解决方案 -
八月约克:
火狐不支持这个东东
Scripting.Dictionary的使用 -
longgol:
有一问:怎么通过flashPaper读取磁盘上的文件路径呢。我 ...
在线文档阅读实现的解决方案
新的air sdk 新增了 ServerSocket类, 利用它我们做一些简单的局域网应用,比如小型的办公聊天软件,以及一些基于socket的服务应用.这样as程序员可以自己搞定服务器端,不在去求于java程序员.在一下大型应用还没有尝试过.期待有人能做一下大型应用的尝试.小型的办公应用足够能满足了. 首先看服务器端代码: 客户端代码,主要就是连接服务器端: 整体实现起来比较简单, 服务器端可以做分发. 如果做个聊天室也非常容易. 期待air的效率能再提高一些.
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.events.ServerSocketConnectEvent;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.utils.ByteArray;
public class Main extends Sprite
{
private var serverSocket:ServerSocket = new ServerSocket();
private var clientSocket:Socket;
private var localIP:TextField;
private var localPort:TextField;
private var logField:TextField;
private var message:TextField;
private var _clients:Array = [];
public function Main()
{
setupUI();
}
//当客户端成功连接服务端
private function onConnect( event:ServerSocketConnectEvent):void
{
clientSocket = event.socket;
clientSocket.addEventListener( ProgressEvent.SOCKET_DATA, onClientSocketData );
_clients.push(clientSocket);
log( "Connection from " + clientSocket.remoteAddress + ":" + clientSocket.remotePort );
}
//当有数据通信时
private function onClientSocketData( event:ProgressEvent ):void
{
var buffer:ByteArray = new ByteArray();
clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable );
log( "Received: " + buffer.toString() );
for (var i:int = 0; i < _clients.length; i++)
{
var item:Socket = _clients[i] as Socket;
if (!item) continue;
item.writeObject(buffer.toString());
item.flush();
}
}
//绑定服务器ip 开始监听端口
private function bind( event:Event ):void
{
if( serverSocket.bound )
{
serverSocket.close();
serverSocket = new ServerSocket();
}
serverSocket.bind( parseInt( localPort.text ), localIP.text );
serverSocket.addEventListener( ServerSocketConnectEvent.CONNECT, onConnect );
serverSocket.listen();
log( "Bound to: " + serverSocket.localAddress + ":" + serverSocket.localPort );
}
//服务器端向所有客户端发送数据
private function send( event:Event ):void
{
try
{
if (_clients.length == 0)
{
log('没有连接');
return;
}
for (var i:int = 0; i < _clients.length; i++)
{
var item:Socket = _clients[i] as Socket;
if (!item) continue;
item.writeObject(message.text);
item.flush();
}
/*if( clientSocket != null && clientSocket.connected )
{
clientSocket.writeUTFBytes( message.text );
clientSocket.flush();
log( "Sent message to " + clientSocket.remoteAddress + ":" + clientSocket.remotePort );
}
else log("No socket connection.");*/
}
catch ( error:Error )
{
log( error.message );
}
}
// 输出日志
private function log( text:String ):void
{
logField.appendText( text + "\n" );
logField.scrollV = logField.maxScrollV;
trace( text );
}
//设置皮肤
private function setupUI():void
{
localIP = createTextField( 10, 10, "Local IP", "0.0.0.0");
localPort = createTextField( 10, 35, "Local port", "0" );
createTextButton( 170, 60, "Bind", bind );
message = createTextField( 10, 85, "Message", "Lucy can't drink milk." );
createTextButton( 170, 110, "Send", send );
logField = createTextField( 10, 135, "Log", "", false, 200 )
this.stage.nativeWindow.activate();
}
private function createTextField( x:int, y:int, label:String, defaultValue:String = '', editable:Boolean = true, height:int = 20 ):TextField
{
var labelField:TextField = new TextField();
labelField.text = label;
labelField.type = TextFieldType.DYNAMIC;
labelField.width = 100;
labelField.x = x;
labelField.y = y;
var input:TextField = new TextField();
input.text = defaultValue;
input.type = TextFieldType.INPUT;
input.border = editable;
input.selectable = editable;
input.width = 280;
input.height = height;
input.x = x + labelField.width;
input.y = y;
this.addChild( labelField );
this.addChild( input );
return input;
}
private function createTextButton( x:int, y:int, label:String, clickHandler:Function ):TextField
{
var button:TextField = new TextField();
button.htmlText = "<u><b>" + label + "</b></u>";
button.type = TextFieldType.DYNAMIC;
button.selectable = false;
button.width = 180;
button.x = x;
button.y = y;
button.addEventListener( MouseEvent.CLICK, clickHandler );
this.addChild( button );
return button;
}
}
}
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.events.ServerSocketConnectEvent;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.utils.ByteArray;
public class MainClient extends Sprite
{
private var serverSocket:ServerSocket = new ServerSocket();
private var clientSocket:Socket;
private var localIP:TextField;
private var localPort:TextField;
private var logField:TextField;
private var message:TextField;
private var _clients:Array = [];
public function MainClient()
{
setupUI();
}
private function onConnect( event:Event ):void
{
log('成功连接服务器!');
//trace('成功连接服务器!!!!');
//clientSocket.addEventListener( ProgressEvent.SOCKET_DATA, onClientSocketData );
log( "Connection from " + clientSocket.remoteAddress + ":" + clientSocket.remotePort );
}
private function onClientSocketData( event:ProgressEvent ):void
{
var buffer:ByteArray = new ByteArray();
clientSocket.readBytes( buffer, 0, clientSocket.bytesAvailable );
log( "Received: " + buffer.toString() );
}
public function bind(host:String = "localhost", port:Number = 9080):void
{
log('开始连接服务器!');
clientSocket = new Socket( localIP.text, parseInt( localPort.text ));
clientSocket.addEventListener(Event.CONNECT, onConnect);//监听连接事件
}
//向服务器发送数据
private function send( event:Event ):void
{
try
{
if( clientSocket != null && clientSocket.connected )
{
clientSocket.writeUTFBytes( message.text );
clientSocket.flush();
//log( "Sent message to " + clientSocket.remoteAddress + ":" + clientSocket.remotePort );
}
else log("No socket connection.");
}
catch ( error:Error )
{
log( error.message );
}
}
private function log( text:String ):void
{
logField.appendText( text + "\n" );
logField.scrollV = logField.maxScrollV;
trace( text );
}
private function setupUI():void
{
localIP = createTextField( 10, 10, "Local IP", "0.0.0.0");
localIP.text = 'localhost';
localPort = createTextField( 10, 35, "Local port", "0" );
createTextButton( 170, 60, "Bind", bind );
message = createTextField( 10, 85, "Message", "Lucy can't drink milk." );
createTextButton( 170, 110, "Send", send );
logField = createTextField( 10, 135, "Log", "", false, 200 )
this.stage.nativeWindow.activate();
}
private function createTextField( x:int, y:int, label:String, defaultValue:String = '', editable:Boolean = true, height:int = 20 ):TextField
{
var labelField:TextField = new TextField();
labelField.text = label;
labelField.type = TextFieldType.DYNAMIC;
labelField.width = 100;
labelField.x = x;
labelField.y = y;
var input:TextField = new TextField();
input.text = defaultValue;
input.type = TextFieldType.INPUT;
input.border = editable;
input.selectable = editable;
input.width = 280;
input.height = height;
input.x = x + labelField.width;
input.y = y;
this.addChild( labelField );
this.addChild( input );
return input;
}
private function createTextButton( x:int, y:int, label:String, clickHandler:Function ):TextField
{
var button:TextField = new TextField();
button.htmlText = "<u><b>" + label + "</b></u>";
button.type = TextFieldType.DYNAMIC;
button.selectable = false;
button.width = 180;
button.x = x;
button.y = y;
button.addEventListener( MouseEvent.CLICK, clickHandler );
this.addChild( button );
return button;
}
}
}
发表评论
-
图片遮罩
2011-11-25 18:03 1128<mx:Canvas width="10 ... -
Flex:使用ArrayCollection过滤Tree
2011-11-16 14:22 1396Flex中的 Tree 是很难被过滤的,因为它们包 ... -
datagrid中滚动条问题
2011-11-14 18:26 3618经常有人在看了前面写的《Flex实现多文 ... -
flex 弹出菜单
2011-11-04 14:38 1192<?xml version="1.0" ... -
AIR管理文件关联, 指定文件默认打开方式
2011-10-30 17:50 2251参考:http://help.adobe.com/zh_CN/ ... -
如何区分不同的订阅者。以便实现个性化订阅。
2011-10-28 04:12 1561参考文章 http://hi.baidu.com/wos ... -
在messaging服务中的服务端的一些属性的说明
2011-10-27 03:29 1069Subscription-timeout-minutes:在这 ... -
Flex事件冒泡机制
2011-09-28 23:22 2727在网上浏览了几篇文章,大体总结了一下,简单说明如下: 事 ... -
Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用
2011-09-26 15:27 1024现在说说Module,这篇教程代码不是最重要的,怎么样合理的使 ... -
12条有用的Flex代码
2011-09-19 21:46 10161.复制内容到系统剪贴板 System.setClipbo ... -
Flex中的 for in 与 for each in
2011-09-12 19:07 1150for...in循环中的迭代变量是对象中的键名(Flex中 ... -
Flex AIR)创建“不规则形状”的Air透明窗体(二)--使用Flex SDK4.5.1
2011-09-10 15:53 2410在此之前,我曾写过一篇关于《创建“不规则形状”的Air透明 ... -
Flex Application 初始化顺序
2011-09-08 16:12 1428Flex应用程序共由两帧组成,第1帧为preloader部分, ... -
Adobe Flash Builder的强大功能--移动设备控制桌面Apps
2011-09-08 14:29 928这个视频中,Adobe平台技术经理Tomas Krcha将会给 ... -
Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>
2011-08-27 14:06 1714本篇是视频聊天,会议 ... -
Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
2011-08-27 13:59 1062本章主要总结数据库的插入,删除,修改,以及语句参数的使用本 ...
相关推荐
as3 Air ServerSocket支持websocket,实现服务端websocket
serversocket web服务器
delphi socket(ClientSocket,ServerSocket)简单实例
Socket+ServerSocket代码
Socket与ServerSocket编程实践聊天,服务器和客户端频繁通信
利用socket开发基于TCP的的C/S通信程序,一个是服务器,一个是客户,服务器和客户间可以进行通信
本资源是java中socket与serverSocket连接的例子,包括客户端和服务器端的程序代码
本程序主要利用Java Socket来实现双机通信,实现一个简单的服务器,客户端聊天通信工具。
用java 代码写的客户端/服务器聊天系统serverSocket and socket
利用DelphiSocket组件制作的简单TCP服务器和客户端
描述如何在WEB服务器启动时加载一个Java ServerSocket服务,单机程序也可借鉴
socket与serversocket交互信息
最简单的socket服务器跟客户端通信 socket clent socketservice ServerSocket
socket和serversocket利用IO流编写的多线程连接相互发送消息
socket C语言编写 客户端和服务器端程序,用于服务器和客户端之间的通信
适合DELPHI开发工程师,Socket源代码,包括建立连接,发送数据,接收数据,维护Socket.
ServerSocket类.pdf
ServerSocket实现一个简单的Web服务器demo
Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建 立基于UDP协议的网络通信
通过对socket类继承实现软件中的服务端类serversocket和客户端类clientsocket。由于将服务端类和客户端类的调用在一个工程中实现,所以一个程序既可以作为服务端也可以作为客户端。代码中加入了基本的错误处理功能。