AS3 - Flash/AIR 套接字通信 writeUTFBytes 仅有效一次

2023-12-01

我有一个套接字服务器侦听 2 个端口,其中 1 个端口用于套接字服务器,1 个端口用于策略服务器。

我的代码如下,在这种情况下,数据发送和接收完全正常。但是,例如,如果我添加一个带有简单按钮的按钮:

socket.writeUTFBytes("Message"); socket.flush();

初始连接后,它似乎没有向我的服务器发送任何数据(我让我的服务器将所有数据传输打印到控制台进行检查)初始连接工作正常,如下所示:

//authenticate with socket server first: var xmlSocket = new XMLSocket(); xmlSocket.connect("192.xx.xx.xx", 843);

try {
    Security.loadPolicyFile("xmlsocket://192.xx.xx.xx:843");
} catch (e:IOError) {
    //tbOutput.text += e.text;
}


var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);

try {
socket.connect("192.xx.xx.xx", 4444);
} catch (e:IOError) {
    //error traced
}


function onConnect(e:Event):void {
    //initial message to socket server:
    var Message:String;
    //message contains something
    socket.writeUTFBytes(Message.toString() + "<EOF>");
    socket.flush();

    }


你基本上是对的,你只是错过了一些东西。
初始连接会保存为 crossdoamin 文件,即使您指定了另一个端口,它也会首先尝试从 4444 获取文件,如果失败,它将转到默认端口 (843) 上的主服务器。
这是你的违规行

Security.loadPolicyFile("xmlsocket://192.xx.xx.xx:843");

如果您查看服务器日志,您会发现当第一次连接建立时,有一个以下形式的请求:<policy-file-request/>发送到服务器。
一旦该请求完成并将文件传递给客户端,则客户端将始终关闭连接。
在客户端,一旦收到跨域并关闭连接,您就可以重新连接并随意发送。


所以回顾一下。
您的 Flash 应用程序已与服务器建立连接。
然后你的应用程序请求跨域并等待
在连接超时之前,您继续通过连接发送某种数据
仍在等待跨域的应用收到了您服务器的响应
由于从服务器收到的数据不是 crossdomain.xml 文件,您的应用程序关闭了连接,并且不允许重新连接

我稍微改变了你的代码以自动重新连接
但是,当有请求时,端口 4444 上的服务器应返回跨域文件。

try {
  Security.allowDomain('192.xx.xx.xx');
  Security.loadPolicyFile("xmlsocket://192.xx.xx.xx:4444");
} catch (e:IOError) {
    //tbOutput.text += e.text;
}


var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);

function connect( ){
  if( !socket.connected ){
    try {
      socket.connect("192.xx.xx.xx", 4444);
    } catch (e:IOError) {
      //error traced
    }
  }
}

function onConnect(e:Event):void {
    //initial message to socket server:
    var Message:String;
    //message contains something
    //socket.writeUTFBytes(Message.toString() + "<EOF>");// EOF bad
    socket.writeUTFBytes(Message.toString() + String.fromCharCode(0) ); // NULL good
    socket.flush();

}

function onResponse(e:ProgressEvent):void {
  var read:String = this.readUTFBytes(this.bytesAvailable );

  // I test for a < since my server will never return a "<" as the first character
  // unless it is the crossdomain.xml file
  // you may need to change this for your needs
  if( read.charAt(0) !='<' ){
    if( read ){
      // so something with your response
    }
  }else{
    // recieved crossdomain policy nothing to really do here it is handled internally
  }
}


var connectTimer:Timer = new Timer( 1000 );
connectTimer.addEventListener(TimerEvent.TIMER, connect );
connectTimer.start();

不要忘记要让端口 4444 上的服务器正常工作,需要返回该端口上的跨域文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AS3 - Flash/AIR 套接字通信 writeUTFBytes 仅有效一次 的相关文章

  • 从 Air Native 扩展返回结构

    是否可以从本机代码返回结构 返回 int 或 boolean 相对简单 但是如何将更复杂的结构返回给动作脚本 您可以返回任何可以在本机代码中表示为 FREObject 的对象 这实际上包括任何 Actionscript 类或 Actions
  • Socket.*Async 方法是线程化的吗?

    我目前正在尝试找出最小化 TCP 主服务器中使用的线程数量的最佳方法 以便最大限度地提高性能 由于我最近阅读了大量 C 5 0 的新异步功能 异步并不一定意味着多线程 这可能意味着将有限状态对象分成较小的块 然后通过交替与其他操作一起进行处
  • Linux TCP服务器:在接受连接之前读取客户端的IP地址

    Related C Winsock API如何在接受连接之前获取连接客户端IP https stackoverflow com questions 716209 c winsock api how to get connecting cli
  • Linux 中 AF_UNIX 数据报消息的最大大小是多少?

    目前我已达到 130688 字节的硬限制 如果我尝试在一条消息中发送更大的内容 我会收到一条消息ENOBUFS error 我已经检查过net core rmem default net core wmem default net core
  • Flash 未在调试播放器中显示错误/堆栈跟踪(firefox/chrome/whatnot)

    我正在尝试调试在线默默地失败的应用程序 我 100 确定我正在运行 Flash 调试播放器 为了确保我不会丢失它 我故意抛出一个错误 但 Flash 在浏览器中没有显示任何 stracktrace 我快要失去它了 有什么线索吗 我正在 ch
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • Erlang get_tcp:recv数据长度

    I user gen tcp recv Socket 0 用于数据接收 但我只能接收1次1418字节 我怎样才能收到发送的数据量 in gen tcp recv Socket 0 您正在询问内核 给我接收缓冲区中现在可用的所有数据 不过 内
  • 无法分配请求的地址 - 可能的原因?

    我有一个由主服务器和分布式从服务器组成的程序 从属服务器向服务器发送状态更新 如果服务器在固定时间内没有收到特定从属服务器的消息 则会将该从属服务器标记为关闭 这种情况一直在发生 通过检查日志 我发现从站只能向服务器发送一个状态更新 然后永
  • 如何在as3中不询问的情况下写入外部文件

    我有这个代码 var fileRef FileReference new FileReference fileRef save ciao coso lingua txt 在现有的 lingua txt 文件上写入 该脚本有效 但每次他保存时
  • 如何从 WinRT StreamSocket 读取所有可用数据并清空 inputStream?

    我想在向套接字写入新数据之前读取当前正在等待套接字的所有数据 WinRT中的读取方法都是异步的 所以我不能简单地while直到套接字为空 由于我确实想丢弃套接字上的数据 因此我不想使用读取器 而是直接从套接字读取数据IInputStream
  • AS3 [Event(name="", type="")],有什么意义?

    我使用 FlashDevelop3 R2 和 Flex 3 3 SDK 进行开发 在很多情况下我必须使用嵌入元数据标签 如下所示 Embed source path to file private var Asset Class 我很好地理
  • 更改由 AS3 添加到舞台的影片剪辑中的动态文本字段不起作用?

    当我更改动态文本字段的文本值时 文本字段只是变为空白 而不显示新值 我有一个名为 game board 的 MovieClip 由 AS3 动态添加到舞台上 舞台一开始是空白的 我有另一个名为 stage 2 的 MovieClip 它作为
  • 如果是 PrintWriter,为什么我应该在循环中刷新而不是在循环之后刷新?

    我的小演示程序中有一个服务器和客户端 我将一些字符串数据从客户端发送到服务器 然后为客户端重新发送这些数据 客户端也将其写入控制台 我对 PrtintWriter 的刷新方法感到困惑 根据 JAVA 文档 该方法刷新流 经过一些研究 我逐渐
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • gjs 如何使用 g_data_input_stream_read_line_async 在 Gnome Shell 扩展中读取套接字流

    我正在尝试编写一个 Gnome Shell 扩展 通过 Socket 服务器与 Arduino 进行通信 服务器和 Arduino 运行良好 但我陷入了监听传入服务器消息的扩展代码 因为我需要一种非阻塞方法 所以使用异步读取行 https
  • 如何在java中通过socket发送Image数据类型

    我真的很困惑如何通过套接字发送图像数据类型 请帮我 我已经搜索了如何将 Image 数据类型转换为 char 但结果是 0 Use ImageIO http docs oracle com javase 1 4 2 docs api jav
  • Java 套接字 - 读和写

    问题 客户端没有收到任何消息 这是客户端和服务器的完整代码 CLIENT public class Client extends Socket public Client String hostName int port throws Un
  • C++套接字256字节缓冲区

    我正在尝试在 C 中使用一些套接字网络编程 我正在尝试发送文本 Hello World 使用 C send 函数发送到服务器 首先 我将缓冲区的大小设置为 13 因为 Hello World 总共是 12 个字符 必须比字符数多 1 个 如
  • 使用jquery调用AS3外部接口

    我正在使用ExternalInterface 调用嵌入在html 页面中的Flash 应用程序 以下代码工作正常 我正在使用按钮进行测试 document ready function button click function var a
  • 使用 Python Mechanize 与 Flash 交互

    我正在尝试用 Python 创建一个处理 Flash 的自动化程序 现在我正在使用Python Mechanize 它非常适合填写表格 但是当涉及到flash时我不知道该怎么办 有谁知道我如何通过 Python mechanize 或其他一

随机推荐

  • 如何在Android中使用DialogFragment进行文本输入?

    我正在尝试使用推荐的方法获取用户输入到对话框中的值DialogFragment类 对话框构造并运行良好 但我无法返回EditText参数传递给父类 无需获取NullPointerException My DialogHost类 它构造 返回
  • 自动过滤多个不相等的值

    我正在为 Excel 表添加自动过滤器 如下所示 With Sheets Sheet1 With ListObjects Summary Range AutoFilter Field 1 Criteria1 gt 400000 Operat
  • 在 ASP.NET 中执行命令行实用程序

    我需要一些有关从 C ASP NET Web 应用程序使用命令行实用程序的建议 我找到了一个用于将文件转换为 CSV 格式的第 3 方实用程序 该实用程序运行良好 可以从命令行使用 我一直在网上寻找有关如何执行命令行实用程序的示例 并发现t
  • 在spring roo中添加自定义页面

    我有一个关于 spring roo 的问题 如何将自定义页面添加到您的 Web 应用程序 如果我使用标准 Servlet 这似乎非常基本且简单 但我完全困惑在 Spring roo 中执行此操作 我想要的只是主页 带有菜单等 中有一个链接到
  • 简单的互操作测试;通过简单的调用使堆栈不平衡

    我目前正在研究与互操作相关的问题 并编写了一个小型测试程序 以帮助我弄清楚发生了什么 有问题的问题涉及对更复杂的本机函数的调用 很难在此处发布 无论如何 我有一个非常简单的本机 dll 其中仅包含以下代码 extern C declspec
  • 无法通过 Ubuntu 终端在 Github 上推送

    我正在尝试从我的 Ubuntu 机器推送到 github 我可以从 Visual Studio Code 终端推送 但无法从 Ubuntu 终端或 Android Studio 终端推送 每次我尝试从终端或 android studio 终
  • 如何终止 jboss 超时的数据库事务

    我用的是jboss 4 2 3 它具有设置 TransactionTimeout 在jboss service xml中 指定允许事务执行多长时间 不幸的是 当超时过去时 执行不会立即中止 如果事务正在执行某些操作 则只会将其标记为稍后回滚
  • 插值内的 Angular MatToolTip 条件

    我正在为 MatToolTip 添加角度条件 首先 以下内容仅适用于 1 个字符串分配 matToolTip myData name 但我需要添加如下条件 matToolTip myData hasName myData name myDa
  • java https网络问题

    我正在尝试实现最简单的 HTTPS 通信程序 网上有很多例子 但我没能成功运行 这是一个例子 public class ReadHttpsURL1 static final int HTTPS PORT 443 public static
  • 为什么在 python map() 和 multiprocessing.Pool.map() 中得到不同的答案?

    我有一个奇怪的问题 我有一个格式的文件 START 1 2 STOP lllllllll START 3 5 6 STOP 我想读一下之间的内容START and STOP作为块 并使用my f处理每个块 def block generat
  • 通过 JavaScript 检索所有已安装打印机的列表

    我收到了一个网页的屏幕截图 其中显示了组合框中客户端可访问的所有已安装打印机 本地和网络打印机 的列表 并让用户选择一台 甚至还有一个刷新列表的按钮 我无权访问该页面 无法证明其功能 是否有可能在网页中以任何方式执行此操作或模拟此工作 如果
  • Office365 REST API - 创建带有附件的日历事件

    我无法使用 Office365 的 Rest API 创建带有附件的日历事件 创建没有附件的事件不是问题 尝试创建带有附件的事件会创建事件 但不会添加我发送的文件 服务器以 201 响应代码进行响应 我正在向以下地址发送 POST 请求 h
  • 按上次修改日期时间过滤 Onedrive 项目

    我尝试通过 lastModifiedDatetime 属性从 Microsoft Graph 端点中筛选 OneDrive 项目 像这样的东西 https graph microsoft com beta me drive special
  • 如何使用 Groovy 的正则表达式获取部分匹配的布尔值?

    Groovy 有一个正则表达式 匹配运算符 The 文档说它返回一个布尔值 但需要 严格匹配 它没有定义 严格匹配 我不熟悉该表达式所在的任何正则表达式系统false 但是 这就是 Groovy 告诉我的 foo bar baz bar g
  • 为什么不捕获一般异常

    我的VS刚刚告诉我 警告 2 CA1031 Microsoft Design 修改 Program Main string 以捕获比 Exception 更具体的异常或重新引发异常 我为什么要那么做 如果我这样做 并且没有捕获所有异常来处理
  • 如何实时回显输出(在脚本完成之前)?

    在脚本执行完毕之前如何输出到浏览器 例如 下面的代码将一次输出所有 100 个 hi 我该如何制作 以便在读取 处理该代码部分后立即输出 例如 PHPBB3论坛显示了逐步安装过程 在循环之前调用 ob implicit flush 请注意
  • 进入振奋精神; Qi还是X3?

    我正在和一个朋友一起为一个小型个人项目做一名口译员 我们开始实现所有类和通用结构 其中代码将被翻译然后执行 只是为了推迟将实际解析代码放入这些结构中 现在我们必须构建解析器 经过一番搜索 我发现到处都有帖子和人们谈论spirit Qi和sp
  • whereArrayContains 限制为 10

    我要过滤问题集合基于tagIDs 一切工作正常但是其中数组包含最多适用于 10 个 id 我怎样才能提高我的结构工作超过10年tagIDs并且确保尽可能少地调用服务器减少金钱支出 Firestore root questions colle
  • 如何使用 Robot 在 IE11 中打开保存对话框弹出窗口

    我正在 IE11 上执行测试 无法使用任何其他浏览器 在执行时 我会弹出下载窗口 并希望将文件下载到 TestResult 文件夹中 我如何使用 Robot 来实现这一目标 我也读过有关 AutoIT 的内容 但不确定 因为我对这些还很陌生
  • AS3 - Flash/AIR 套接字通信 writeUTFBytes 仅有效一次

    我有一个套接字服务器侦听 2 个端口 其中 1 个端口用于套接字服务器 1 个端口用于策略服务器 我的代码如下 在这种情况下 数据发送和接收完全正常 但是 例如 如果我添加一个带有简单按钮的按钮 socket writeUTFBytes M