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/