发现免费端口

dij*_*tra 4 erlang tcp

我在erlang中编写了一个服务器应用程序,在C#中编写了一个客户端 它们通过3个TCP端口进行通信.端口号是硬编码的.现在我想动态地这样做.这是我第一次进行网络编程,所以请原谅我无法使用正确的术语:-D

我想做的是让一个主管接受来自客户端在先前已知端口(例如,10000或其他)上的TCP连接,然后找到3个空闲端口,在这3个端口上启动服务器应用程序并告诉客户端那些端口号,以便客户端可以连接到服务器.

我的特殊问题是:如何找到3个未使用的端口?(澄清:用哪个模块:fun()来查找自由端口?)

我的一般问题是:我确定这种东西(一个服务器分配端口和重定向客户端)是相当常见的网络编程问题,应该有一堆(特定于erlang或一般)资源,但我只是不要没有谷歌的术语.

Cha*_*ieP 13

根据此处的Erlang文档,如果gen_tcp:listen/2函数的Port参数为0,则OS将为套接字分配任何可用端口.然后可以使用inet:port/1来检索后者.

你可以这样做:

{ok, Listen} = gen_tcp:listen(0, [Options]),
Port = inet:port(Listen).
Run Code Online (Sandbox Code Playgroud)

  • Elixir版本:`{:ok,listen} =:gen_tcp.listen(0,[]); {:ok,port} =:inet.port(listen); port` (4认同)