gpt4 book ai didi

sockets - 查找服务器套接字的端口号

转载 作者:行者123 更新时间:2023-12-03 12:00:21 25 4
gpt4 key购买 nike

我正在创建一个服务器套接字

% set serverSocket [socket -server accept 0]
sock005DBCC0

由于我使用端口号为零,因此操作系统将为服务器套接字分配一个空闲端口。

来自 man页面,我知道我们必须使用 -socknamechan configure获取端口号。

-sockname

For client sockets (including the channels that get created when a client connects to a server socket) this option returns a list of three elements, the address, the host name and the port number for the socket. If the host name cannot be computed, the second element is identical to the address, the first element of the list.


%  chan configure $serverSocket -sockname
0.0.0.0 0.0.0.0 65495 :: :: 65495

如您所见,上述命令返回六个元素。 ::有什么意义这里 ?它是指全局范围吗?

我的实际意图是获取套接字正在监听的端口号。

那么,为了获取端口号,我可以单独检索列表的最后一个元素,如下所示吗?
% set serverPort [lindex [chan configure $serverSocket -sockname] end]
65495
%

我问这个的原因是因为该列表中该端口号的重复。

最佳答案

该列表中有两组三个元素,正是因为幕后的服务器套接字实际上是两个:一组用于 IPv4,一组用于 IPv6。 Tcl 会打开两者,因为它不知道客户端将如何提前连接(除非您在设置服务器选项时使用 -myaddr 选项以使其只能使用一种协议(protocol))。理论上它们可以在不同的端口上,但这确实不太可能,因为 Tcl 试图为两者使用相同的端口;你关于采取最后一项的想法可能很好。

如果你真的很在意,当你有两个地址时,第一个是 IPv4 地址,第二个是 IPv6 地址,所以你可以使用 lindex … 2lindex … 5 (或 lindex … end )准确选择您的意思。

我可能会这样做:

lassign [chan configure $serverSocket -sockname] serverAddress serverName serverPort

关于sockets - 查找服务器套接字的端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29250507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com