`
hideto
  • 浏览: 2678854 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang和ActionScript3的Socket通讯

阅读更多
server.erl
-module(server).
-export([start/0,start/1,process/1]).
-define(defPort, 8888).

start() -> start(?defPort).

start(Port) ->
  case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
    {ok, LSock} -> server_loop(LSock);
    {error, Reason} -> exit({Port,Reason})
  end.

%% main server loop - wait for next connection, spawn child to process it
server_loop(LSock) ->
  case gen_tcp:accept(LSock) of
    {ok, Sock} ->
      spawn(?MODULE,process,[Sock]),
      server_loop(LSock);
    {error, Reason} ->
      exit({accept,Reason})
  end.

%% process current connection
process(Sock) ->
  Req = do_recv(Sock),
  io:format("~p~n", [Req]),
  Resp = "Hello, " ++ Req ++ "!",
  do_send(Sock,Resp),
  gen_tcp:close(Sock).

%% send a line of text to the socket
do_send(Sock,Msg) ->
  case gen_tcp:send(Sock, Msg) of
    ok -> ok;
    {error, Reason} -> exit(Reason)
  end.

%% receive data from the socket
do_recv(Sock) ->
  case gen_tcp:recv(Sock, 0) of
    {ok, Bin} -> binary_to_list(Bin);
    {error, closed} -> exit(closed);
    {error, Reason} -> exit(Reason)
  end.


Client.as
package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.Socket;
	import flash.text.*;

	public class Client extends Sprite
	{
		private var socket:Socket;
		private var myField:TextField;
		public function Client()
		{
			socket = new Socket();
			myField = new TextField();
			// 添加事件处理回调函数
			socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
			socket.connect("localhost", 8888);
			socket.writeUTFBytes("hideto");
			socket.flush();
			myField.x = 20;
			myField.y = 30;
			myField.text = "test";
			myField.autoSize = TextFieldAutoSize.LEFT;
			addChild(myField);
		}
		// 事件处理回调函数
		private function onSocketData(event:ProgressEvent):void {
			while(socket.bytesAvailable) {
				myField.text = socket.readUTFBytes(socket.bytesAvailable);
			}
		}
	}
}


编译运行:
server.erl在Eshell里编译并启动
Eshell > c(server).
Eshell > server:start().
"hideto"  %% 打印接受到的来自AS client的消息

Client.as在Flex Builder 3里编译运行
client.html里显示一个TextField,value为“test”,但是过了一会value变为“Hello, hideto!”,这是因为ActionScript里Socket连接都是异步的,不能直接从Socket连接中读取数据,而是通过事件处理函数进行读取处理,数据读取完毕后更新TextField的value,所以会看到value由“test”改为“Hello, hideto!”
分享到:
评论
2 楼 gakaki 2008-09-02  
http://github.com/bwbuchanan/erl_amf/tree/master
1 楼 gakaki 2008-09-02  
好吧 支持您 还没有开源项目做erlang的amf

相关推荐

    erlang与delphi多客户端通讯

    总结,"erlang与delphi多客户端通讯"这一主题涉及到Erlang和Delphi的网络编程,Socket通信,跨语言交互,以及特定端口(843)的使用。在实际项目中,开发者需要综合运用这些技术来构建稳定、高效且安全的多客户端...

    Erlang和RabbitMQ安装包

    Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是基于Erlang构建的一个开源消息代理,用于实现应用程序...

    Erlang中的socket编程简单例子

    本文将深入探讨Erlang中的TCP和UDP socket编程,以及如何实现简单的echo服务器和客户端。 首先,我们需要了解Erlang中处理TCP socket的gen_tcp模块。gen_tcp模块提供了用于创建TCP连接的接口,它允许我们监听端口、...

    erlang和rabbitmq.zip

    【标题】"erlang和rabbitmq.zip" 涉及到的是两个关键技术:Erlang编程语言和RabbitMQ消息队列系统。Erlang是一种并发性极强、容错性出色的函数式编程语言,而RabbitMQ是基于Erlang开发的开源消息代理和队列服务器。 ...

    基于Erlang的即时通讯系统的设计与实现_黄明.caj

    基于Erlang的即时通讯系统的设计与实现

    图书:Erlang和OTP实战

    《Erlang和OTP实战》是一本专注于Erlang编程语言和OTP(Open Telecom Platform)框架的专业书籍。这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库...

    Erlang23_3.zip

    总的来说,Erlang23_3版本的发布为开发者提供了在Windows 64位和Linux平台上使用Erlang的新选择,包括可能的性能改进和新特性。对于那些需要构建高效、高并发、容错系统的人来说,这是一个重要的更新,他们可以通过...

    erlang编程 Introducing Erlang

    "Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...

    安装Erlang和RabbitMQ

    安装Erlang和RabbitMQ,linux系统下的哦,有红色字体标注!已踩坑

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    Erlang官网下载过慢

    标签中提到了“Erlang Rabbit 异步通讯”,这意味着讨论的重点是Erlang如何与RabbitMQ结合实现异步通信。RabbitMQ是一个开源的消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供了一种可靠、高效...

    使用Erlang和Yaws开发REST式的服务

    3. **Yaws应用程序(yapp)**:yapp是Erlang/OTP应用程序,拥有自己的文档根目录和一组appmod。yapp利用OTP提供的强大功能,如分布式、容错和监控,适合构建复杂的Web服务。 RESTful服务设计的核心原则是基于资源的...

    inside Erlang VM3

    - **高效数据结构**:Erlang内置了几种高效的数据类型如原子(Atom)、二进制(Binary)、列表(List)和元组(Tuple)。 - **垃圾收集**:ERTS采用了标记-清除算法,并支持分代垃圾回收策略。 - **软实时系统**:ERTS支持软...

    erlang和RabbitMQ的安装包

    Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是一个基于Erlang开发的消息中间件,广泛应用在微服务...

    erlang25.0 windows版本

    - **Rebar3**:Erlang的构建和依赖管理工具,帮助你组织项目结构、编译代码和管理依赖。 - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、...

    Erlang与C构建的节点通讯完整例子

    Windows下Erlang与C构建的节点通讯完整例子,包含cnode工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/40836273

    RabbitMQ3.9.13和ErLang24.2版本

    3. **分布式特性**:Erlang的分布式特性使得构建分布式系统变得简单,RabbitMQ正是利用这一特性实现集群部署,从而提供跨节点的高可用性和负载均衡。 4. **性能优化**:Erlang 24.2版本可能包含对内存管理和垃圾...

    erlang22最新下载包

    3. **错误修复**:Erlang22.1可能会包含一系列错误修复,确保代码的稳定性和可靠性。 4. **库和工具的更新**:OTP中的各种库(如Mnesia数据库、ERTS(Erlang Run-Time System)和其他并发工具)可能进行了升级,以...

    erlang_版本24.3.4.4

    3. **编译Erlang**:进入解压后的目录,运行`./configure`命令来配置编译选项。这一步会检测你的系统环境并生成适合的Makefile。 4. **构建和测试**:执行`make`命令开始编译Erlang。这个过程可能需要一些时间,...

    erlang资源

    3. **过程和模块**:Erlang的组织方式,包括如何定义和调用函数,以及模块的使用。 4. **错误调试**:Erlang的错误处理机制,如shell的使用、日志和调试工具。 5. **REPL(Read-Eval-Print Loop)**:Erlang shell...

Global site tag (gtag.js) - Google Analytics