c# - 与 C# 程序通信 Erlang 服务器

标签 c# erlang server binaries

我正在尝试为我的程序编写 Erlang 服务器,但仍然遇到一些我无法处理的问题。使用它时(我在 erlang 中编写了客户端来测试服务器):

send(Socket, Message) ->
BinMsg = term_to_binary(Message),
gen_tcp:send(Socket, Message).

一切似乎都正常,但是当我尝试从我的 c# 客户端发送内容时,服务器看到连接和断开连接但看不到消息(它甚至没有反应)

theStream = mySocket.GetStream();
theWriter = new StreamWriter(theStream);
String foo = theLine + "\r\n"; 
test = System.Text.Encoding.UTF8.GetBytes(foo);
theWriter.Write(test);

我意识到这可能是 Erlang 的一些问题

term_to_binary()

但是我不知道怎么解决。我需要简单的:

  1. 客户端将数据转换为字节
  2. 客户端向服务器发送数据
  3. 服务器编码数据
  4. 服务器决定做什么
  5. 服务器生成新数据,将其转换为字节并发送给客户端
  6. 客户端对其进行编码

我可以在字符串上做简单的事情,但我不认为这种方法是好的解决方案,我想发送二进制文件而不是字符串。有什么建议吗?

最佳答案

您应该在客户端正确编码数据,以便能够在 Erlang 中使用 term_to_binary/binary_to_term。看看http://erlang.org/doc/apps/erts/erl_ext_dist.html实现起来并不难,我认为应该有现成的解决方案。

但是从您的话来看,您的代码似乎还有其他问题,因为 Erlang 应该在错误的二进制文件上抛出异常。可能与 {active, true|false|once|N} 有关。您应该在套接字上设置 {active, true} 以便能够将 TCP 数据包作为 Erlang 消息接收(onceN 也很好,采取查看文档:http://erlang.org/doc/man/gen_tcp.html)。如果你想接收二进制文件,你应该在套接字上设置 binary 选项。

关于c# - 与 C# 程序通信 Erlang 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318123/

相关文章:

debugging - 如何在Erlang中使用trace和dbg来调试和跟踪我的程序?

windows - PHP 5.6 和 Plesk 中的 .htaccess

C# 字典与列表用法

c# - 绘制透明按钮

erlang - ejabberd 离开房间的手动 XMPP 规则

ios - 此服务器的证书无效。您可能正在连接到伪装成 “domain” 的服务器

linux - 在 Ubuntu Server (Linux) 中使用 rm 时如何更改错误消息

c# - 寻求通用的基于上下文的存储

c# - 变量的内存地址

internationalization - 网络应用程序的 Erlang 国际化?