问题标签 [gen-tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
103 浏览

database - 将erlang套接字存储到数据库

我需要将套接字存储到数据库中, gen_tcp:accept 返回类似

我可以使用 io_lib:format 将其转换为位串

将其存储到数据库中,但是如何将其转换回原始状态以使用它来发送和接收数据?

更新: 我试过term_to_binary了,但是 mysql-otp 插入失败,所以我做了binary_to_list(term_to_binary(Socket)),它插入得很好,但在二进制文件的开头添加了额外的 <<194,xxx,xx...>> 到数据库中,有什么解决方案吗?为什么会这样?如果它没有添加额外的数据,我可以使用binary_to_term.

0 投票
1 回答
363 浏览

tcp - 如何在 erlang gen_tcp 中同时处理一个客户端?

我有侦听 Ip:Port 的 TCP 服务器。

任务:当一个客户端连接到 Ip:Port(例如telnet Ip Port)时,另一个尝试连接的客户端必须被丢弃。换句话说,独占使用 Ip:Port。

问题:

  • 如何使用 gen_tcp 模块在 Erlang 上实现?
  • 可以通过 gen_tcp:listen 的选项来解决吗?
  • 如何以编程方式放弃 Erlang 中的尝试连接?

PS我是erlang的新手。

0 投票
1 回答
283 浏览

http - erlang:如何从套接字接收 HTTP/RTSP 消息?

我想用 Erlang 管理 HTTP 或 RTSP 会话。

例如,RTSP 协议的标准会话如下所示:

每条消息的长度都是不同的。对于 erlang,gen_server:listen使用选项{active, true}(允许获取无限数量的数据)或{active, false}(用于获取固定长度的数据)。

有没有推荐的方法来获取和解析这些可变长度的消息?

0 投票
1 回答
186 浏览

erlang - Erlang gen_tcp 连接仅适用于同一网络

正如问题所述,当我设置服务器时,它可以在同一网络(不同的计算机但相同的 wifi)上接收来自客户端的消息,但是当客户端在另一个网络上时,它无法访问服务器,我不知道为什么它不能。任何人都可以帮忙吗?

0 投票
1 回答
118 浏览

elixir - 如何编辑回显服务器以允许多个客户端交换消息

我创建了一个没有客户端代码的服务器。我只需要在终端 telnet 127.0.0.1 4001 和另一个终端 telnet 127.0.0.2 4001 上输入,所以当我在第一个终端上输入一条消息时,它会出现在同一个终端上,我知道这是一个回显服务器,我想要的只是是在可能的情况下修改此代码,以便其他终端上的其他客户端可以接收该消息。这是一个回显服务器代码:

我应该改变什么,所以当我使用 telnet 打开许多客户端时,他们会收到来自彼此的消息

0 投票
1 回答
61 浏览

erlang - 如何禁用两个节点在同一个端口上连接?

我正在制作一个多聊天应用程序,这是代码。在这个应用程序中,我创建了一个服务器,代码如下:

您可以在代码中看到有一个客户端部分:

我希望当我在一个端口上启动一个节点时,另一个节点只能连接另一个节点。这怎么可能?

0 投票
1 回答
81 浏览

erlang - 如何使用 ListenSocket 的 PORT 的环境变量启动 iex

我已经为我的应用程序创建了一个服务器和一个客户端部分,我想用不同的端口启动每个节点,我想用环境变量来做这怎么可能?这是服务器代码:

和客户端连接代码:

完整的代码在这里

0 投票
1 回答
44 浏览

node.js - 带有设置 {packet,4} 并使用 NodeJS“帧流”进行 TCP 通信的 OTP gen_tcp 的奇怪行为

我一直在努力让我的消息在我的 NodeJS 服务器和我的 erlang gen_tcp 服务器之间正确构建。在我不得不发送大数据消息并需要切换到消息大小框架之前,我一直在成功使用 {packet,line}。

我将 gen_tcp 设置为{packet,2}

我正在使用来自: https ://github.com/davedoesdev/frame-stream 的库 用于 NodeJS tcp 解码端。它也设置为数据包大小选项 2,我尝试了数据包大小选项 4。

我看到任何长度低于 127 个字符的消息,此设置运行良好,但任何超过此长度的消息都有问题。

我通过从 gen_tcp 发送越来越长的消息来运行测试,然后读出 NodeJS 端收到的前四个字节:

在消息 127 上:标题:0 0 0 127 帧长度 127

在消息 128 上: HEADER: 0 0 0 239 <----- 这应该是 128 帧长度 239 <----- 这应该是 128

理论:

  • 一些字符编码不匹配,因为它在数字 128 上(可能?)
  • gen_tcp 或库中的一些错误(极不可能?)
  • 巫毒魔咒让我在人权日工作(很可能)

来自wireshark的数据显示如下:

标头字节由 gen_tcp 正确编码超过 128 个字符,因为十六进制值按如下方式进行:

所以一定是NodeJS端的库调用Node readUInt16BE(0)或者readUInt32BE(0)函数的时候出错了。但是我检查了endieness,两者都是big-endian。

如果标头字节为 [A,B],则在二进制中,此错误发生在 [00000000 01111111] 之后

换句话说, readUInt16BE(0) 将 [000000000 10000000] 读取为 0xef ?这甚至不是字节序选项...?

感谢您对如何解决此问题的任何帮助。

亲切的问候

戴尔