`
liuyxit
  • 浏览: 37358 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

Flex AIR(WindowedApplication)与Java的socket通讯例子。

阅读更多
Socket服务器:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

class SimpleServer {
	private static SimpleServer simpleServer;
	private ServerSocket server;
	private Socket client;
	private BufferedReader reader;
	private BufferedWriter writer;

	public static void main(String[] args) {
		int port = 9999;

		try {
			port = Integer.parseInt(args[0]);
		} catch (ArrayIndexOutOfBoundsException e) {
			// Catch exception and keep going.
		}

		simpleServer = new SimpleServer(port);
	}

	private SimpleServer(int port) {
		System.out.println(">> Starting SimpleServer");
		try {
			server = new ServerSocket(port);
			client = server.accept();
			reader = new BufferedReader(new InputStreamReader(client
					.getInputStream(), "UTF-8"));
			writer = new BufferedWriter(new OutputStreamWriter(client
					.getOutputStream(), "UTF-8"));

			writer.write("输入\"EXIT\"退出.\r");
			System.out.println("输入\"EXIT\"退出.");
			boolean done = false;
			while (!done) {
				String str = reader.readLine();
				if (str == null) {
					done = true;
				} else {
					if (str.trim().equals("EXIT")) {
						done = true;
					} else {
						str = "我接收到(server):" + str.trim() + "\r";
						out(str);
					}
				}

			}
			client.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void out(String str) {
		try {
			writer.write(str);
			writer.flush();
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


用法:
1.代码另存为SimpleServer.java
2.javac SimpleServer.java
3.java SimpleServer

Socket客户端:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
						layout="vertical"
						applicationComplete="appComp()">
	<mx:Script>
		<![CDATA[
			private var socketServer:Socket;
			[Bindable]
			private var response:String="";

			private function appComp():void
			{
				//连接服务器
				var server:String="localhost";
				var port:int=9999;

				socketServer=new Socket(server, port);
				//配置事件监听器
				configListeners();
			}

			/**
			 * 配置事件监听器
			 */
			private function configListeners():void
			{
				//socket关闭事件
				socketServer.addEventListener(Event.CLOSE, closeHandler);
				//socket连接成功事件
				socketServer.addEventListener(Event.CONNECT, connectHandler);
				//socket连接不成功出的IO错误事件
				socketServer.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
				//访问权限出错事件
				socketServer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
				//
				socketServer.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);

			}

			//socket写字节函数
			private function writeln(str:String):void
			{
				str+="\n";
				try
				{
					socketServer.writeUTFBytes(str);
				}
				catch (e:IOError)
				{
					trace(e);
				}
			}
			
			//发送信息函数
			private function sendRequest():void
			{
				trace("sendRequest");
				response+=inTxt.text + "\n";
				writeln(inTxt.text);
				socketServer.flush();
				inTxt.text = "";
			}
			
			//读入响应信息函数
			private function readResponse():void
			{
				var str:String=socketServer.readUTFBytes(socketServer.bytesAvailable);
				response+=str;
			}
			
			/**
			 * 关闭处理函数
			 */
			private function closeHandler(event:Event):void
			{
				trace("closeHandler: " + event);
				trace(response.toString());
			}
			
			/**
			 * 连接成功处理函数
			 */
			private function connectHandler(event:Event):void
			{
				trace("connectHandler: " + event);
				response+="已连接"
			}
			
			/**
			 * socket的IO错误处理函数
			 */
			private function ioErrorHandler(event:IOErrorEvent):void
			{
				trace("ioErrorHandler: " + event);
			}
			
			/**
			 * 安全错误处理函数
			 */
			private function securityErrorHandler(event:SecurityErrorEvent):void
			{
				trace("securityErrorHandler: " + event);
			}
			
			/**
			 * socket处理函数
			 */
			private function socketDataHandler(event:ProgressEvent):void
			{
				trace("socketDataHandler: " + event);
				readResponse();
			}
			
			/**
			 * 发送按钮点击事件处理函数
			 */
			private function onClick(evt:Event):void
			{
				sendRequest();
			}
		]]>
	</mx:Script>

	<mx:TextArea text="{response}"
				 id="outTxt"
				 height="126"
				 width="283"
				 fontSize="12"/>
	<mx:HBox verticalAlign="bottom"
			 width="282"
			 height="40">
		<mx:TextArea id="inTxt"
					 width="100%"
					 height="100%"
					 fontSize="12"/>
		<mx:Button label="发送"
				   fontSize="12"
				   click="onClick(event)"/>
	</mx:HBox>
</mx:WindowedApplication>



分享到:
评论
1 楼 zwljava 2012-07-28  
不错,整合java和air比较方便的办法。

相关推荐

    air执行exe

    flex的air程序中执行exe s:WindowedApplication

    flex导出excel的代码

    &lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt; &lt;![CDATA[ import mx.controls.CheckBox; import mx.controls.Alert;...&lt;/mx:WindowedApplication&gt;

    RobotLegs-V2:RobotLegs 2.2.1 开发 flex 应用程序示例

    机器人腿 2.2.1 示例应用程序... s : WindowedApplication xmlns : fx = " http://ns.adobe.com/mxml/2009 " xmlns : s = " library://ns.adobe.com/flex/spark " xmlns : mx = " library://ns.adobe.com/flex/mx "

    puremvc-as3-util-air-desktopcitizen:PureMVC AS3 AIR实用程序

    实用程序:桌面公民(AIR) 此实用程序使基于PureMVC的AIR应用程序能够在每次启动时记住其窗口大小,位置和最大化状态。 它还提供了一种在关闭应用程序窗口之前要求确认(或执行某些关闭过程)的功能。 包括标准版...

    Gromacs中文手册5.0.2.pdf

    Gromacs中文手册5.0.2

    tensorflow_transform-0.1.0-py2-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    tensorflow_recommenders-0.3.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    python冒泡排序(Bubble Sort).docx

    python冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是一个用Python实现的冒泡排序的例子: ```python def bubble_sort(lst): n = len(lst) for i in range(n): # 创建一个标记,用于优化 swapped = False # 遍历所有未排序的元素 for j in range(0, n-i-1): # 交换相邻元素,如果它们的顺序错误 if lst[j] > lst[j+1] : lst[j], lst[j+1] = lst[j+1], lst[j] swapped = True # 如果在内循环中没有交换

    A1_SSE_123090177.py

    A1_SSE_123090177.py

    asp代码ASP基于WEB的商场管理系统的设计与实现(源代码+论文)

    asp代码ASP基于WEB的商场管理系统的设计与实现(源代码+论文)本资源系百度网盘分享地址

    tensorflow_onmttok_ops-0.2.0-cp35-cp35m-manylinux2014_x86_64.whl

    算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    三菱PLC例程源码S2401佑倡油压机

    三菱PLC例程源码S2401佑倡油压机本资源系百度网盘分享地址

    Modown v4.3资源下载WordPress主题

    Modown是模板兔基于Erphpdown wordpress下载插件开发的一款全新的针对收费付费下载资源的WordPress主题,一款为erphpdown而生的wp主题。此主题不包含erphpdown插件(免激活版)价值199元。注意在其他地方购买可能不包含插件,还要自己去购买插件,而且不一定是免激活版。 自适应响应式设计,兼容主流浏览器 网格样式与瀑布流样式任意切换 自带与主题UI完美兼容搭配的erphpdown前端用户中心页面(此功能若单独找我们定制也需要几百) 首页banner处可以换成幻灯片、增加搜索框、按钮等 分类多重筛选(每个分类的筛选标签可自定义) 自定义文章类型(博客或教程等等),文章列表显示 一键社交账号登录,自定义的登录注册找回密码页面模板(含验证码) 多个小工具以及页面模板(前端投稿页面) CMS式首页模板(显示多个分类板块,可子分类筛选) Ajax无刷新评论 集成ckplayer视频播放器(使用短代码 [ckplayer]视频地址[/ckplayer]) 外链特色图片,列表页文章图片可自定义高度 文章单栏与双栏切换,可点赞收藏 特点说多了等于扯淡,惊喜等你来

    python冒泡排序.md

    python冒泡排序 冒泡排序的时间复杂度为O(n^2),其中n是列表的长度。这是因为对于每个元素,我们可能需要与其后面的所有元素进行比较和交换。尽管冒泡排序在某些情况下可能不是最优的选择,特别是当处理大型数据集时,但它易于理解和实现,对于初学者来说是一个很好的起点。 值得注意的是,冒泡排序在最好的情况下(即列表已经排序)的时间复杂度为O(n),但这种情况很少发生。通常,我们讨论冒泡排序的时间复杂度时,我们指的是其平均和最坏情况,即O(n^2)。 冒泡排序的一个优化是,如果在一次遍历中没有发生任何交换,那么列表已经排序完成,我们可以提前终止算法。这可以避免不必要的比较和交换操作。下面是优化后的冒泡排序代码:

    理工科研究生简历模板,美观且信息量足

    春招秋招应届生必备,美观大方排版好看简历模板,需要word版本或者需要简历指导可以私。

    基于深度学习的USPS手写体识别模型.zip

    人工智能毕业设计&课程设计

    基于PaddleOCR重构,并且脱离PaddlePaddle深度学习训练框架的OCR.zip

    人工智能毕业设计&课程设计

    asp代码ASP基于WEB网上聊天室设计(源代码+论文)

    asp代码ASP基于WEB网上聊天室设计(源代码+论文)本资源系百度网盘分享地址

    三菱PLC例程源码层绕机

    三菱PLC例程源码层绕机本资源系百度网盘分享地址

    三菱PLC例程源码YX细伸拉丝机三菱FXPLC程序(有注解)张力控制与传统的指拔开关不一样

    三菱PLC例程源码YX细伸拉丝机三菱FX PLC程序(有注解)张力控制与传统的指拔开关不一样本资源系百度网盘分享地址

Global site tag (gtag.js) - Google Analytics