在不使用服务器套接字的情况下侦听 AS3 (AIR) 客户端中的传入连接

2024-04-04

我设法创建一个 C# 服务器,使用它向 AS3(AIR) 客户端发送文件sockets。在 AS3 方面我使用的是flash.net.Socket库通过以下方式接收数据TCP.

它是这样工作的:
-> 我打开我的服务器,它侦听客户端(另外我可以创建已连接设备的列表);
-> 我打开客户端,它会自动接收数据;

接收数据的触发事件是在客户端上进行的,即,我只需打开服务器,当客户端打开时,它就会获取数据,从而触发这些事件:

socket.addEventListener(Event.CONNECT, onConnect); -> to connect to the server  
socket.addEventListener(Event.SOCKET_DATA, onDataArrival); -> to receive the data  

现在我想做一些不同的事情。我不想在客户端上触发它,我希望服务器这样做,即我想打开我的客户端并在服务器上输入客户端将获取数据的内容。

那么为什么我要尝试让客户端成为客户端/服务器呢?嗯,因为我的服务器是一台机器,而我的客户端是连接服务器的 XXX 移动设备,这就是我实现这一目标的方法。

因此,鉴于我刚才所说的,我成功地创建了我的 AS3 客户端/服务器应用程序,它的工作原理就像我想要的那样,使用flash.net.ServerSocket图书馆。

首先我让客户听:

serverSocket.bind(portNumber, "10.1.1.212");
serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, onConnectServer);
serverSocket.listen();

然后我使用接收数据flash.net.Socket Event.SOCKET_DATA

差不多就是这样了。就像我想要的那样工作。
但是,那flash.net.ServerSocket与移动设备不兼容,但...

所以这是我的问题:我需要将文件从 C# 服务器(需要监听客户端,以便我可以创建连接的设备列表)发送到 AS3(AIR) 客户端,但我必须定义哪个客户端正在获取数据服务器,而客户端需要准备好随时接收该数据,因此,监听,但它们有很多,这就是为什么我将它们视为客户端。

我的问题是:有没有办法让客户端侦听传入连接并在发生时触发事件,而不使用 AS3 中的服务器套接字?

另外,如果您有不同的方法来实现我的目标,而不使用 C# 服务器 AS3 客户端/服务器逻辑,请随意提出您的意见。


是的。您的客户端应该通过以下方式连接到服务器flash.net.Socket (doc http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html) or flash.net.XMLSocket (doc http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/XMLSocket.html)。大多数情况下,您只需要一个server其中许多clients可以连接。目前还不完全清楚为什么两端都有服务器?

Edit:

下面是一个客户端使用以下命令持续监听来自服务器的消息的快速示例:Socket。这将连接到服务器,然后(无限期地)等待数据。当接收到一大块数据时(在本例中,我期望字符串以换行符结尾),数据将与事件一起传递。

如果您尝试过这种方法但没有成功,您应该查看是否有任何错误或者连接是否被关闭。

文档类:

package  {
    import flash.display.Sprite;

    public class Main extends Sprite {
        protected var socket:SocketTest;

        public function Main() {
            this.socket = new SocketTest();
            this.socket.addEventListener(SocketMessageEvent.MESSAGE_RECEIVED, onSocketMessage);
            this.socket.connect("127.0.0.1", 7001);
        }

        protected function onSocketMessage(e:SocketMessageEvent):void {
            var date:Date = new Date();
            trace(date.hoursUTC + ":" + date.minutesUTC + ":" + date.secondsUTC + " Incoming message: " + e.message);
        }
    }
}

套接字测试类:

package  {
    import flash.net.Socket;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.events.ProgressEvent;
    import flash.errors.IOError;

    public class SocketTest extends Socket {
        protected var _message:String;

        public function SocketTest() {
            super();
            this._message = "";

            this.addEventListener(Event.CONNECT, socketConnected);
            this.addEventListener(Event.CLOSE, socketClosed);
            this.addEventListener(ProgressEvent.SOCKET_DATA, socketData);
            this.addEventListener(IOErrorEvent.IO_ERROR, socketError);
            this.addEventListener(SecurityErrorEvent.SECURITY_ERROR, socketError);
        }

        protected function socketData(event:ProgressEvent):void {
            var str:String = readUTFBytes(bytesAvailable);

            //For this example, look for \n as a message terminator
            var messageParts:Array = str.split("\n");

            //There could be multiple messages or a partial message, 
            //pass on complete messages and buffer any partial
            for (var i = 0; i < messageParts.length; i++) {
                this._message += messageParts[i];
                if (i < messageParts.length - 1) {
                    this.notifyMessage(this._message);
                    this._message = "";
                }
            }
        }

        protected function notifyMessage(value:String):void {
            this.dispatchEvent(new SocketMessageEvent(SocketMessageEvent.MESSAGE_RECEIVED, value));
        }

        protected function socketConnected(event:Event):void {
            trace("Socket connected");
        }

        protected function socketClosed(event:Event):void {
            trace("Connection was closed");
            //TODO: Reconnect if needed
        }

        protected function socketError(event:Event):void {
            trace("An error occurred:", event);
        }
    }
}

SocketMessageEvent类:

package  {
    import flash.events.Event;

    public class SocketMessageEvent extends Event {
        public static const MESSAGE_RECEIVED:String = "messageReceived";

        protected var _message:String;

        public function SocketMessageEvent(type:String, message:String = "", bubbles:Boolean = false, cancelable:Boolean = false) {
            super(type, bubbles, cancelable);
            this._message = message;
        }

        public function get message():String {
            return this._message;
        }
    }
}

作为测试,我将服务器设置为每 5 秒发送一条消息,这是控制台中的输出:

Socket connected
21:36:24 Incoming message: Message from server: 0
21:36:29 Incoming message: Message from server: 1
21:36:34 Incoming message: Message from server: 2
21:36:39 Incoming message: Message from server: 3
21:36:44 Incoming message: Message from server: 4
21:36:49 Incoming message: Message from server: 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不使用服务器套接字的情况下侦听 AS3 (AIR) 客户端中的传入连接 的相关文章

  • 什么会导致“IO错误java.net.SocketException:选择失败”?

    我的笔记本电脑上运行一个服务器程序 相同的路由器和相同的代码 它工作正常 客户端可以连接 然而 当我将工作区复制到我的电脑并运行它时 我得到了这样的废话 IO错误java net SocketException 选择失败 这是代码 publ
  • 如何在 ZeroMQ 套接字中检索和存储随机 UUID?

    我需要在多个客户端之间进行通信 当我尝试运行文件 多个终端 时 我得到相同的身份 所以我让路由器套接字自动设置UUID 但我发现我无法使用该身份存储在服务器上以在多个客户端之间进行路由 我如何处理多个客户端 ID 我正在尝试构建一个异步聊天
  • 自定义上下文菜单未显示,因为显示对象位于“顶部”

    作为这里另一个问题的后续 我已经在 Flash 应用程序中构建了一个自定义上下文菜单项 但遇到了有时不显示的问题 我发现问题是另一个精灵位于带有自定义上下文菜单的项目的 顶部 然而 即使将 mouseEnabled 和 mouseChild
  • IRC 机器人:错误 - 注册超时

    我正在用 C 语言制作一个简单的 IRC 机器人 我终于让机器人连接并接收信息 我的代码也应该发送 但服务器表现得好像没有发送任何内容 当机器人连接时 我收到以下信息 收到 roc esper net 通知授权 查找您的主机名 收到 roc
  • 用 C 语言进行非阻塞 udp 套接字编程:我能得到什么?

    我在理解从非阻塞 UDP 套接字返回什么recv recvfrom 时遇到问题 与 TCP 相比更具体一点 如果我错了 请纠正我 阻塞套接字 TCP 或 UDP 在缓冲区中有一些数据之前不会从 recv 返回 这可以是一定数量的字节 TCP
  • 位图太大 as3

    在AS3中 我从zip文件加载png nochump的zip库通过ByteArray到Loader png 的宽度最大可达 45k 像素 但高度仅为 120 像素 这在 Flash 中产生了一个问题 因为图像的宽度只能约为 8000 像素
  • Silverlight 套接字:模仿框架 Bind、Listen 和 Accept 方法?

    我有这个 NET Framework C 类 它实际上充当 TCP 连接的包装器Socket http msdn microsoft com en us library attbb8f5 aspxSystem Net Sockets 命名空
  • Adobe Air 与 Flash Player 10.1 运行时

    Adobe Flash Player 是一个浏览器 插件提供的优势 用户和内容创作者 浏览器 包括能够 在浏览器中交付 RIA Adobe AIR 融合了最初的技术 在 Flash Player 中开发并启用 丰富的互联网应用 桌面 Ado
  • 使用 MP4 编码在 Flash 中流式传输网络摄像头视频

    我正在开发的 Flash 应用程序的功能之一是能够将网络摄像头流式传输给其他人 我们只是使用 Flash 中的内置网络摄像头支持并通过 FMS 发送它 有些人要求更高质量的视频 但我们已经在 Flash 中使用了最高质量设置 将质量设置为
  • NodeJS:TCP套接字服务器仅在第一次返回数据

    我正在尝试在 node js 中编写一个小型中继脚本 用于侦听本地套接字上传入的 TCP 连接 当它收到连接时 将流量转发给第三方 它还必须从该第三方获取任何返回的数据并将其发送回原始本地套接字 我试过类似的代码http delog wor
  • Python - 将整数或字符串发送到 Spark-Streaming

    我可以通过 CSV 文件发送我的数据 首先 将我的随机数写入CSV文件然后发送 但是可以直接发送吗 我的套接字代码 import socket host localhost port 8080 s socket socket socket
  • 具有非阻塞或多线程功能的 Ruby Tcp Server 类

    找不到任何可以帮助创建非阻塞 多线程服务器的 gem 或类 哪里可以找到 The Ruby 文档 http ruby doc org core classes Socket html M002091关于套接字有一些很好的例子 使用该页面中的
  • 创建 ip 网络数据包 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须使用任何协议手动创建自己的网络
  • 如何将 boost::asio 套接字转换为 C++/CLI .Net 套接字?

    我想要的是简单的 从 boost asio 套接字创建新的 C CLI Net 套接字的代码示例 如何创建这样的东西 这是我想做的伪代码 net socket a boost asio socket b a assign b nativeW
  • 选择时的套接字阻塞和超时

    我目前正在创建一个回显服务器 该服务器在空闲 maxWaitTime 后断开客户端连接 我希望程序会阻塞套接字 直到客户端发送数据 但是当我在 gdb 中运行该程序时 它会通过 select 并阻塞 Readline 我知道 retval
  • 将两个声音文件合并为一个新文件

    如何合并两个声音并另存为新文件 一种声音是加载的 mp3 文件 另一种声音来自麦克风 然后我需要将这个声音上传到服务器中 这可能吗 这一切都可以完成 但如果你看的是简单的例子 调用的方法很少 恐怕就没那么容易了 您可以使用以下命令从声音中提
  • 使用套接字和 AsyncTask 强制关闭

    堆栈的人们大家好 请参阅下面我的班级代码和我的 LogCat 尝试连接时我受到强力关闭 如果有人能帮助我找出原因 我将不胜感激 基本上代码的作用是 从意图中获取 IP 地址 连接到端口 32 的 IP 然后发送一个命令 等待响应并发送另一个
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2)

    当我尝试连接 mysql 时出现以下错误 Can t connect to local MySQL server through socket var lib mysql mysql sock 2 这个错误有解决办法吗 其背后的原因可能是什
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我

随机推荐

  • jquery加载大数据

    我有一个返回数据的 Web 服务 数据集相当大 可能有 600 行 20 列 在 Jquery 代码中将此数据加载到 html 表中最快最有效的方法是什么 我尝试通过循环返回的数据并在字符串中创建表 DOM 来创建表 html 但循环部分非
  • 遵循 JSON-LD API 中的所有链接

    假设我想使用一个返回 JSON LD 的 API 并跟踪所有链接 我正在尝试Hydra API 演示 http www markus lanthaler com hydra api demo 但它应该适用于所有 JSON LD API 而不
  • ListView 中的 WPF ListView

    我确信我错过了一些简单 明显的东西 但我似乎无法在 ListView 中绑定 ListView 的数据
  • Java 中的 Thread.Sleep 替代方案

    有人告诉我使用Thread Sleep 有时 人们希望在同步方法的操作循环中设置一些时间间隔 这是一个糟糕的解决方案 另一方面 我有两个不同的线程 它们在程序运行期间处于活动状态 还有一个共享对象 当我在该共享对象中使用 Object wa
  • 是否有像 pygccxml 一样的 Python Clang 包装器来包装 GCC-XML?

    很长一段时间以来 我一直在使用 pygccxml 来解析和内省我的 C 源代码 它帮助我在构建过程中进行一些巧妙的代码生成 最近我读了很多关于 LLVM 堆栈的好处 特别是 LLVM Clang 解析器给 C 编译带来的好处 我现在想知道
  • 如何在 Debian 上升级 glibc?

    我听说我可以使用apt get install libc6 但我需要向 etc apt sources list 添加一些内容才能接收最新的 glibc 版本 我应该怎么办 我能够安装libc6 2 17 in Debian Wheezy通
  • 3D饼图:图例太大

    传说的问题太大了 当我改变cex的数量时 字体太小 盒子仍然很大 希望盒子和测试可以搭配 不会太小也不会太大 table lt data frame num c 90 26 28 39 98 countries c India Sri La
  • Parse.com:如何为 Fragment 内的 Parse ListView 添加搜索过滤器

    我正在尝试为选项卡片段内的 ListView 添加搜索过滤器 使用适配器从解析服务器调用数据 我的片段java文件如下 跑车 java import android os Bundle import android text Editabl
  • 如何使 Hibernate @Lock 注释适用于 Oracle DB?

    我偶然发现 Oracle DB 中锁定行的问题 锁的目的是防止多个事务从数据库读取数据 因为这些数据会影响新数据的生成 并且会在事务中发生更改 为了进行锁定 我将 Lock 注释放在 SpringData find 方法上 该方法检索参与事
  • std::vector 中的每个元素访问都是缓存未命中吗?

    据了解std vector将其数据保存在堆上 因此向量本身的实例和第一个元素具有不同的地址 另一方面 std array是原始数组的轻量级包装 其地址等于第一个元素的地址 假设集合的大小足以容纳一个缓存行int32 在我的具有 384kB
  • 在 WebBrowser 控件中检测滚动到底部

    我正在创建一个 Windows 窗体来接受公司的一些条款和条件 因此 条款和条件位于 Web 上 并通过 WebBrowser 控件导航到 WinForm 仅当完整文档滚动到底部后才需要启用 接受 按钮 我正在寻找类似于 VScrollBa
  • 在 Windows Vista/7 下复制到 Program Files

    我用C 编写了一个向导 它将一些文件安装到Windows下的程序文件文件夹中 据我了解 我需要管理员权限才能在 Vista 7 下写入程序文件 所以我的问题是 有没有一种方法可以在应用程序分别运行时仅针对一个向导页面打开管理员权限 或者我是
  • 巴泽尔的$地点扩张

    我想添加 location 扩展到rules scala for jvm flags我在其中设置依赖项的属性data属性 但失败了 label src java com google devtools build lib worker in
  • CoffeeScript 类在主 javascript 中不可访问

    我有一个用咖啡脚本编写的课程 例如 class Example constructor gt each 1 2 3 key value gt test value return test render gt alert test 我把这个类
  • Mahapps 1.3 对话框和 Avalon.Wizard

    我已经集成了流行的 UI 库Mahapps http mahapps com 与阿瓦隆精灵 https avalonwizard codeplex com 控制 它集成得很好 但我对 Mahapps 对话框有疑问 Wizard 控件定义了一
  • PYPY3——无法安装 Pandas

    我一直在尝试在 PYPY 中安装 pandas 但没有成功 以下是完整的日志消息 Windows 10 64 位操作系统 已安装 Visual C 2015 2019 可再发行组件 Python 3 7 点 19 3 1 通过 Anacon
  • 在中国电话中向上滑动时应用程序后台服务停止

    我一直在寻找有关中国手机 Oppo 华为 小米 Vivo 等 这个问题的答案 当应用程序向上滑动 关闭 时 后台服务停止运行 大多数解决方案是 包含 START STICKY 并使用 AlarmManager 启动服务 以编程方式将用户引导
  • Java Reflection:查找自定义 AbstractProcessor 中的方法用法

    我是反思的新手 有没有办法检测特定方法在哪里被调用 例如 public class MyClass public static void method DO SOMETHING public class Test public test M
  • 如何更改 Emacs 中的草稿消息?

    刮擦消息总是说 This buffer is for notes you don t want to save and for Lisp evaluation If you want to create a file visit that
  • 在不使用服务器套接字的情况下侦听 AS3 (AIR) 客户端中的传入连接

    我设法创建一个 C 服务器 使用它向 AS3 AIR 客户端发送文件sockets 在 AS3 方面我使用的是flash net Socket库通过以下方式接收数据TCP 它是这样工作的 gt 我打开我的服务器 它侦听客户端 另外我可以创建