javascript - 套接字远程端口代表什么?

标签 javascript node.js sockets http tcp

http-client.js:

const http = require('http');

http.get
(
    {
        port : 9001,
        host : 'localhost'
    },
    (res) =>
    {
        //...
    }
);

tcp-server.js:

const net = require('net');

let server = new net.Server();

server.listen(9001, 'localhost', (err) =>
{
    console.log('Started listening', server.address());
});

server.on('connection', (sock) =>
{
    console.log(`Connected ${sock.remoteAddress}:${sock.remotePort}`);
});

我运行 node tc-server.js,然后当我运行 node http-client.js 时,我看到如下输出:

Started listening { address: '127.0.0.1', family: 'IPv4', port: 9001 }
Connected 127.0.0.1:59506

我关闭 http-client.js 并再次运行 node http-client.js。我看到:已连接 127.0.0.1:59508

我关闭服务器并再次运行,然后再次运行客户端,我看到 Connected 127.0.0.1:59510

所以 socket.remotePort 一直在增加。我不明白的是为什么这些端口号,我期待看到 9001 端口号,因为这是发送 http 请求并成功到达监听 tcp 服务器的地方。

最佳答案

双方 TCP session 的双方都必须有一个地址和一个端口。例如,客户端也使用端口。您的 console.log 告诉您的是客户端使用其端口 59506 连接到您的端口 9001。当您的服务器向客户端发送数据包时,它使用客户端的地址和端口号来寻址它们,因此客户端网络堆栈的 TCP 层知道将数据包发送到哪个进程。 (更多信息在 the Wikipedia article on TCP 中。)您会看到数量的增加只是客户端系统如何为连接分配可用端口的副产品。

您通常不需要关心客户端的端口。

关于javascript - 套接字远程端口代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49600682/

相关文章:

javascript - 在 Android 网页中禁用缩放输入焦点

javascript - 单击具有特定值的 anchor 时运行 jQuery 函数

javascript - 防止函数名称在缩小时被破坏

node.js - 如何设置express中的默认 View 文件夹?

node.js - 服务器重启时无法让我的 Upstart 脚本运行 Node.js 和 Forever

python - TCP 服务器在初始连接后未收到任何信息。 Python

javascript - 如何在用户停止使用 angularjs 打字后每天发送请求

javascript - React hook 状态对于几个相同的事件具有不同的值

Python 一个类轮静默套接字监听器

java - 客户端套接字未连接到服务器套接字