要点是 pack 和 unpack 函数
Erlang使用{packet,N}后,会自动在数据前面增加N为 16进制数据,代表接下来的数据长度
AS里面也有类似功能
PHP没有直接的方法,需要自己封装包头信息,和解包
(感谢 mryufeng 的提示,将fgets 改成 fread)
<?php
$host ="114.80.88.*";
$port =5101;
$fp = stream_socket_client("tcp://$host:$port", $errno, $errstr, 2);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
stream_set_timeout($fp,2);
get_line($fp);
put_line($fp,"SYSMSG,bobo,Hi boy");
fclose($fp);
}
function get_line($handle){
while(!feof($handle)){
$buff =fread($handle,2); //获得长度信息
$head =unpack("H*",$buff);
return fread($handle,hexdec($head[1]));
}
}
function put_line($handle,$data){
$body =pack("A*",$data); //将数据打包
$len =strlen($body);
$head =pack("H*",to_hex_str($len));
fwrite($handle,$head.$body);
}
function to_hex_str($num){ //将十进制长度转换成16进制,并且补0
$str =dechex($num);
$str =str_repeat('0',4-strlen($str)).$str;
return $str;
}
?>
分享到:
- 2009-08-12 11:40
- 浏览 1736
- 评论(0)
- 论坛回复 / 浏览 (0 / 12952)
- 查看更多
相关推荐
本教程将介绍如何基于RabbitMQ搭建自己的Erlang服务器,并进行必要的改进。 首先,我们需要安装Erlang环境。Erlang是RabbitMQ的基础,因为它提供了强大的并发处理能力和内置的分布式计算支持。在Windows、Linux或...
`proto`目录可能包含了游戏服务器使用的协议定义,这些协议定义了客户端与服务器之间的通信格式,例如玩家登录、移动、战斗等操作的请求和响应。这通常是用protobuf(Protocol Buffers)或者其他类似工具来实现的,...
ERLANG是一种为并发、分布式和容错系统设计的函数式编程语言,因其在实时系统和大规模并发处理中的优秀性能而被广泛应用于游戏服务器开发。这份压缩包包含了这两款游戏的Erlang服务器源码,为深入理解游戏服务器的...
6. **游戏源码分析**:对于初学者来说,分析游戏服务器的源码可以帮助理解Erlang在实际项目中的应用,包括如何处理玩家输入、如何维持游戏世界的状态、如何实现网络通信协议等。 7. **学习路径**:初学者可以通过...
这个“erlang服务器集合”包含了多个项目,主要围绕`openpoker`和`英雄远征`游戏服务器的源代码,为深入理解Erlang在大规模并发环境下的应用提供了丰富的实例。 1. **OpenPoker**: OpenPoker是一个用Erlang编写的...
标题中的"C#与Erlang的群通信"指的是在编程领域中,使用C#和Erlang两种不同的编程语言进行集群或分布式系统间的通信。这两种语言各有特点,C#是微软开发的面向对象的编程语言,常用于Windows平台的开发,而Erlang则...
3. 多线程:Java客户端可能采用多线程技术,一个线程用于接收服务器的消息,另一个线程负责处理用户输入并发送到服务器,保证了用户界面的响应性和服务器通信的并发性。 4. 用户界面:客户端通常会有一个友好的图形...
3. **ErlyJS**: ErlyJS是一个纯Erlang实现的JavaScript编译器,它面向Erlang VM,旨在提供高性能的服务器端JavaScript,简化Ajax和Comet Web应用的开发。ErlyJS可以与CouchDB的JSON API无缝对接。 【代码层面的结合...
Erlang Ranch是一个轻量级、高性能的网络协议栈,专为构建TCP服务器而设计。在游戏开发领域,由于其并发处理能力和强大的故障恢复机制,Erlang常被用来构建可扩展、高可用性的游戏服务器。Ranch库提供了一种简单的...
Erlang客户端可以直接与Erlang服务器通信,而Java客户端则通过Jinterface与Erlang服务器交互。客户端负责显示聊天界面,接收用户输入,并将消息发送到服务器。 - **消息协议**:为了实现Erlang和Java之间的通信,...
EMQTT是采用Erlang语言开发,全面支持MQTT V3.1.1协议,支持集群和大规模连接的开源MQTT消息服务器。EMQTT致力于发布一个基于Erlang/OTP语言平台,企业级稳定可靠,完全开源免费,可集群支持大规模物联网、移动...
Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是基于Erlang构建的一个开源消息代理,用于实现应用程序之间的异步通信。 **Erlang** Erlang由瑞典电信设备制造商Ericsson...
Erlang可以很容易地实现这些协议的服务器端,而Java可以使用HttpURLConnection或者其他的开源库来实现客户端的文件上传和下载。 5. **并发处理**:Erlang的进程模型使得并发处理变得简单且高效,每个gen_server实例...
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。
RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)标准,被广泛用于分布式系统中的可靠消息传递。Erlang是RabbitMQ的基础语言,因为RabbitMQ就是用Erlang编写的。Erlang...
Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...
Python库如paramiko被用来处理SSH连接和会话,而Erlang则通过Python接口与SSH服务器通信。这样,Erlang节点可以将SSH作为其分布计算的一部分,而不必直接实现SSH协议。 **Erlang的分布式特性** Erlang的分布式特性...
Erlang是一种面向并发的、基于actor模型的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性和可扩展性的分布式系统。在Web服务器领域,Erlang由于其天然的并发处理能力和强大的错误恢复...
Erlang是一种并发性极强、容错性出色的函数式编程语言,而RabbitMQ是基于Erlang开发的开源消息代理和队列服务器。 【Erlang】 Erlang由爱立信在1986年为电信应用设计,其设计目标是处理大规模并发连接和高可用性。...