问题标签 [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 回答
1003 浏览

tcp - 发送消息后客户端关闭,为什么带有 opts {active, false} 的 gen_tcp 接受两次

我只是用 gen_tcp 做一个测试。一个简单的回显服务器和一个客户端。

但是客户端启动和关闭,服务器接受两个连接,一个是好的,另一个是坏的。

我的演示脚本有任何问题,以及如何解释它?

服务器

演示服务器

客户

```

0 投票
1 回答
219 浏览

sockets - 在erlang中中断gen_tcp:recv

我们有一个 gen_server 进程,它通过创建被动套接字池并将它们借给其他进程来管理客户端的被动套接字池。任何其他进程都可以借用套接字,使用套接字向服务器发送请求,通过 gen_tcp:recv 得到答复,然后将套接字释放给 gen_server 套接字池进程。

套接字池进程监视所有借用套接字的进程。如果任何借用的进程宕机,它会从它那里得到一个宕机信号:

handle_info({'DOWN', Ref, process, _Pid, _Reason}, State) ->

在这种情况下,我们想清空借来的套接字,并通过放回池中来重用它。问题是,在尝试使用 清空套接字gen_tcp:recv(Socket, 0, 0)时,我们收到 inetealready错误消息,这意味着recv操作正在进行中。

所以问题是如何中断先前recv的,成功地排空一个套接字,并为其他进程重用。

谢谢。

0 投票
1 回答
515 浏览

elixir - 当实际 telnet 客户端工作时,Elixir gen_tcp.recv 没有收到单元测试数据

我有一个正在工作的 telnet 服务器,我正在尝试为其创建一个单元测试。服务器可以与 telnet 客户端一起正常工作,并且应在建立连接后立即发送提示。在同一个套接字上发送工作正常。但是,来自单元测试的 TCP 客户端拒绝接收数据并超时。我是 Elixir 的新手,所以,我可能缺少一些基本的东西。

我得到以下输出

如果有人可以阐明 Elixir 新手做错了什么,那将有所帮助

0 投票
1 回答
263 浏览

sockets - 如果达到超时,gen_tcp:recv/3 是否会关闭套接字?

我目前有一个处理来自客户端的多个连接的服务器,以及使用两个连接连接到服务器的客户端。我的客户端有两个进程分别处理与服务器之间的发送和接收,但不能同时处理两者。我目前遇到的问题是当我想关闭套接字时,我的阅读过程卡在了gen_tcp:recv/2块上。如果我设置了超时,则在达到超时时套接字将关闭。我的问题是,是否可以进行gen_tcp:recv/3不关闭套接字的调用。
这就是我的阅读过程。

recv/2正如您在此处看到的,如果没有读取任何内容,该进程将永远无法收到关闭。

0 投票
1 回答
488 浏览

erlang - 如何停止在erlang中作为gen_server实现的tcp_listener

我将 tcp_listener 实现为 gen_server()。我有一个名为 start_link(Port) 的函数在该端口创建一个 tcp_listener。现在,我很难理解如何通过 stop() 告诉 tcp_listener 停止监听。我尝试用 stop 调用这样的函数。

在 terminate/2 函数中,我尝试关闭侦听套接字但失败了。

如果我关闭侦听套接字,我产生的已接受连接会发生什么。

谢谢!

0 投票
1 回答
170 浏览

sockets - tcp服务器和客户端交互

我有一个 tcp 服务器(回显服务器)接受连接。我有一个客户端,当给定参数 N 时,它会创建许多试图与 tcp 侦听器连接的进程。我能够连接到这些套接字,但我可以看到许多套接字被关闭,这很明显,因为我使用的是回显服务器,我没有收到我发送的消息。

这是服务器代码(关键部分)

连接到服务器的客户端。创建 N 个进程连接到服务器,然后使用返回的套接字进行通信。

0 投票
1 回答
291 浏览

sockets - 使用 gen_tcp 时的套接字接受率

我在使用gen_tcp行为时发现了一个有趣的问题。我有一个服务器和一个客户端。服务器接受连接,客户端创建许多进程都尝试连接到侦听服务器。

如果我尝试启动客户端,该客户端会产生许多尝试同时连接到套接字的进程,那么许多进程都会失败。但是,如果我输入,timer:sleep(x)那么每个套接字都被接受。

这是否意味着gen_tcp:accept()它可以接受某些连接请求的限制?

服务器和客户端的代码如下:

客户:

0 投票
1 回答
499 浏览

tcp - 使用 gen_tcp:send/2 通过套接字发送消息

如何使用 gen_tcp 在 erlang 中发送 [Integer, String] 形式的消息。

例如:我希望使用 gen_tcp:send/2 通过套接字发送 [25, "Hello"] 或 [50, "Hi"] 形式的消息。

我试着做[ID | Msg] 但这无济于事。谢谢

0 投票
1 回答
2882 浏览

sockets - gen_tcp:recv/2 返回错误,einval

我有一个客户端,它创建 N 个进程并全部连接到这样的服务器:

我正在创建许多客户端连接。稍后,服务器可能会向我发送一些数据,所以我正在使用 gen_tcp:recv/2 等待,但我收到 {error, einval}。

另外,我如何使用套接字有什么问题,因为我观察到套接字一旦被接受就会被关闭。

关于为什么的任何输入?

谢谢

0 投票
0 回答
63 浏览

sockets - tcp 服务器只接受一些连接

我有一个 tcp 服务器和一个客户端。客户端产生 1000 个进程,每个进程都试图连接到 tcp 服务器。我可以看到 tcp 服务器正在接受 245 个连接并拒绝所有其他连接。每次,服务器都接受第一个 245。

修复:尝试增加 backlog 属性但没有用。
尝试在每个进程生成后调用 timer:sleep(N) 以便我可以降低 tcp 服务器可以接受客户端的速率。失败的!

服务器和客户端:

客户: