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

时间:2018-04-01 17:24:19

标签: 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。我明白了:Connected 127.0.0.1:59508

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

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

1 个答案:

答案 0 :(得分:1)

TCP会话的两个端都必须有一个地址和一个端口。例如,客户也使用端口。您If iRetval < 10 Then FL_PERIOD = "0" & CStr(iRetVal) Else FL_PERIOD = CStr(iRetVal) Endif 告诉您的是客户端使用其端口59506连接到您的端口9001.当您的服务器向客户端发送数据包时,它使用客户端的地址和端口号来解决它们,因此TCP层是客户端上的网络堆栈知道将数据包发送到哪个进程。 (the Wikipedia article on TCP中的更多信息。)您会看到数字的增加只是客户端系统如何为连接分配可用端口的副产品。

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