Socket的remote port(远程端口)代表什么?附Node.js代码示例
Socket的remote port(远程端口)代表什么?
嘿,我来给你掰扯清楚Socket的remote port到底是什么~
简单来说,remote port就是发起网络连接的客户端程序在它自己本地机器上使用的临时端口号。和服务器端固定监听的端口(比如你例子里的9001)不一样,这个端口不是客户端主动指定的,而是客户端操作系统在发起连接时随机分配的临时端口,用来区分同一台客户端机器上的不同网络连接。
举个你给的Node.js例子来说明:
首先是你的TCP服务器代码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}`); });
这个服务器启动后会在localhost的9001端口监听,等待客户端连接。
然后是HTTP客户端代码http-client.js:
const http = require('http'); http.get ( { port : 9001, host : 'localhost' }, (res) => { //... } );
当你先运行node tcp-server.js,再运行node http-client.js时,客户端会向服务器发起HTTP连接请求。这时候服务器的connection事件被触发,打印的日志里的remotePort就是客户端操作系统临时分配给这个HTTP请求的端口——比如你可能会看到类似Connected ::1:56789这样的输出,这里的56789就是remote port。
为什么需要这个端口呢?因为同一台客户端机器可能同时和多个服务器(甚至同一个服务器)建立多个连接,每个连接都需要一个唯一的「客户端IP+客户端端口+服务器IP+服务器端口」组合来标识,这样操作系统才能把收到的数据包准确转发给对应的客户端程序。
内容的提问来源于stack exchange,提问作者Robert C. Holland
相关产品推荐
相关产品推荐

