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!”
分享到:
相关推荐
总结,"erlang与delphi多客户端通讯"这一主题涉及到Erlang和Delphi的网络编程,Socket通信,跨语言交互,以及特定端口(843)的使用。在实际项目中,开发者需要综合运用这些技术来构建稳定、高效且安全的多客户端...
Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是基于Erlang构建的一个开源消息代理,用于实现应用程序...
本文将深入探讨Erlang中的TCP和UDP socket编程,以及如何实现简单的echo服务器和客户端。 首先,我们需要了解Erlang中处理TCP socket的gen_tcp模块。gen_tcp模块提供了用于创建TCP连接的接口,它允许我们监听端口、...
【标题】"erlang和rabbitmq.zip" 涉及到的是两个关键技术:Erlang编程语言和RabbitMQ消息队列系统。Erlang是一种并发性极强、容错性出色的函数式编程语言,而RabbitMQ是基于Erlang开发的开源消息代理和队列服务器。 ...
基于Erlang的即时通讯系统的设计与实现
《Erlang和OTP实战》是一本专注于Erlang编程语言和OTP(Open Telecom Platform)框架的专业书籍。这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库...
总的来说,Erlang23_3版本的发布为开发者提供了在Windows 64位和Linux平台上使用Erlang的新选择,包括可能的性能改进和新特性。对于那些需要构建高效、高并发、容错系统的人来说,这是一个重要的更新,他们可以通过...
"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...
安装Erlang和RabbitMQ,linux系统下的哦,有红色字体标注!已踩坑
Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...
标签中提到了“Erlang Rabbit 异步通讯”,这意味着讨论的重点是Erlang如何与RabbitMQ结合实现异步通信。RabbitMQ是一个开源的消息代理,它遵循Advanced Message Queuing Protocol (AMQP)标准,提供了一种可靠、高效...
3. **Yaws应用程序(yapp)**:yapp是Erlang/OTP应用程序,拥有自己的文档根目录和一组appmod。yapp利用OTP提供的强大功能,如分布式、容错和监控,适合构建复杂的Web服务。 RESTful服务设计的核心原则是基于资源的...
- **高效数据结构**:Erlang内置了几种高效的数据类型如原子(Atom)、二进制(Binary)、列表(List)和元组(Tuple)。 - **垃圾收集**:ERTS采用了标记-清除算法,并支持分代垃圾回收策略。 - **软实时系统**:ERTS支持软...
Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是一个基于Erlang开发的消息中间件,广泛应用在微服务...
- **Rebar3**:Erlang的构建和依赖管理工具,帮助你组织项目结构、编译代码和管理依赖。 - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、...
Windows下Erlang与C构建的节点通讯完整例子,包含cnode工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/40836273
3. **分布式特性**:Erlang的分布式特性使得构建分布式系统变得简单,RabbitMQ正是利用这一特性实现集群部署,从而提供跨节点的高可用性和负载均衡。 4. **性能优化**:Erlang 24.2版本可能包含对内存管理和垃圾...
3. **错误修复**:Erlang22.1可能会包含一系列错误修复,确保代码的稳定性和可靠性。 4. **库和工具的更新**:OTP中的各种库(如Mnesia数据库、ERTS(Erlang Run-Time System)和其他并发工具)可能进行了升级,以...
3. **编译Erlang**:进入解压后的目录,运行`./configure`命令来配置编译选项。这一步会检测你的系统环境并生成适合的Makefile。 4. **构建和测试**:执行`make`命令开始编译Erlang。这个过程可能需要一些时间,...
3. **过程和模块**:Erlang的组织方式,包括如何定义和调用函数,以及模块的使用。 4. **错误调试**:Erlang的错误处理机制,如shell的使用、日志和调试工具。 5. **REPL(Read-Eval-Print Loop)**:Erlang shell...