利用AMF数据封装与Flash 进行Socket通讯

2024-02-17 22:59

本文主要是介绍利用AMF数据封装与Flash 进行Socket通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么80%的码农都做不了架构师?>>>   hot3.png

AS3的Socket类给我们提供了一个readObject方法和writeObject方法与服务器通讯,可以让我们在协议可读性和传输效率上两个兼 顾。如果在网络游戏开发前期你无法确定完全规划好你的协议,那么使用这种方法是一个不错的选择。等到一切调试顺畅了,再在此基础上进行事件类型的抽象。

下面我们利用Adobe的开源项目BlazeDS中提供的类进行AMF3封装与Flash Socket通讯介绍一下这种方式。

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.Amf3Input;
import flex.messaging.io.amf.Amf3Output;public class AmfServer
{
public static void main(String args[])
{SerializationContext serializationContext=new SerializationContext();//序列化amf3对象Amf3Output amfout=new Amf3Output(serializationContext);//实现了一个输出流,其中的数据被写入一个 byte 数组。ByteArrayOutputStream byteoutStream=new ByteArrayOutputStream();//将byteoutStream产生的数组流导入到DataOutputStream流中DataOutputStream dataoutstream=new DataOutputStream(byteoutStream);//创建ServerSocket和Socket对象ServerSocket serverSocekt;Socket socket;// 设置流的编码格式为amf3amfout.setOutputStream(dataoutstream);//创建Map对象、Double对象数组HashMap map=new HashMap();map.put("Event", "人物移动");map.put("user", "闪刀浪子");map.put("x", 100);map.put("y", 100);  try {amfout.writeObject(map);//实际上是将map对象写入到dataoutstream流中dataoutstream.flush();//清空缓存} catch (IOException e) {e.printStackTrace();}//将ByteArrayOutputStream流中转化成字节数组byte[] messageBytes=byteoutStream.toByteArray();//amf3数据OutputStreamWriter osw;//使用amf3格式将写入流中的数据编码成字节BufferedWriter bwrite;//用来封装OutputStreamWriter,以提高效率try {System.out.println("输出数组长度"+messageBytes.length);   serverSocekt=new ServerSocket(1028);//开启服务器进程   System.out.println("服务器已经启动。。。。。。。");   socket=serverSocekt.accept();   if(socket.isConnected()){System.out.println(">>>>>>>>>>客户端已连接");}//socket.osw=new OutputStreamWriter(socket.getOutputStream());//将字符流转化为字节流bwrite=new BufferedWriter(osw);//封装osw对象,提高写入的效率socket.getOutputStream().write(messageBytes);//向流中写入二进制数据socket.getOutputStream().flush();socket.getOutputStream().close();} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}
}
}
上面的这个例子我们模拟了一个事件——人物移动,并把相关数据一并封装到了一个Object对象里面。

下面是客户端的代码(AmfSocket.fla)

var socket:Socket=new Socket();
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
socket.connect("localhost",1028);
var obj:Object=new Object();addEventListener("recieved",recievedData);
function recievedData(evt:Event)
{
switch (obj.Event) {case "人物移动" :trace("把玩家:"+obj.user+" 移动到"+obj.x+","+obj.y);break;case "人物换装" :trace("人物换装");break;case "消息广播" :trace("系统信息");break;default :break;
}};function closeHandler(event:Event):void {
trace("连接关闭");
}function connectHandler(event:Event):void {
trace("连接成功");
}function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler信息: " + event);
}function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler信息: " + event);
}function socketDataHandler(event:ProgressEvent):void {
trace("接收数据");
obj=socket.readObject();
this.dispatchEvent(new Event("recieved"));
}



转载于:https://my.oschina.net/fir01/blog/468005

这篇关于利用AMF数据封装与Flash 进行Socket通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719252

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

企业如何进行员工的网络安全意识培训?

企业网络安全意识培训的重要性         企业网络安全意识培训是提升员工网络安全素质的关键环节。随着网络技术的快速发展,企业面临的网络安全威胁日益增多,员工的网络安全意识和技能水平直接关系到企业的信息安全和业务连续性。因此,企业需要通过系统的网络安全意识培训,提高员工对网络安全的认识和防范能力,从而降低企业在面对潜在安全风险时的损失和影响。 企业网络安全意识培训的方法         企

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳