טיפ רשתות - מקשיבים לפורט 0
29/12/2023
מה אתם עושים כשאתם צריכים להעלות שרת לבדיקות אבל לא יודעים באיזה פורט לבחור? במקום להסתבך ולחפש תנו למערכת ההפעלה להחליט. פורט 0 הוא לא פורט חוקי בתקשורת TCP, ולכן כשאנחנו מבקשים מהקוד להקשיב לפורט 0 אנחנו שולחים אותו לבקש איזשהו פורט פנוי ממערכת ההפעלה. וזה נפלא לבדיקות.
שימו לב לקוד הבא ב node.js שמעלה שרת echo, מנסה לכתוב אליו ומוודא שקיבל בחזרה את התשובה הנכונה:
const net = require('node:net');
const assert = require('node:assert');
async function main() {
var server = net.createServer(function(socket) {
socket.pipe(socket);
});
server.listen(0, '127.0.0.1');
await new Promise((resolve, _reject) => server.on('listening', resolve));
const clientSocket = net.createConnection(server.address().port);
await new Promise((resolve, _reject) => clientSocket.on('connect', resolve));
clientSocket.on('data', (data) => {
const dataWritten = Buffer.from('hello world\n', 'utf8');
const dataRead = data;
assert(dataRead.equals(dataWritten));
clientSocket.end();
server.close();
});
clientSocket.write("hello world\n");
}
main();
התוכנית פותחת שרת על המחשב המקומי, מתחברת אליו, שולחת הודעת טקסט ומוודאת שקיבלה בחזרה בדיוק את אותה הודעה. מה שמעניין כאן הוא שורת ה listen:
server.listen(0, '127.0.0.1');
במקום להתחייב על פורט אני נותן למחשב לבחור, ואחר כך בשביל להתחבר אליו אני רק צריך להסתכל ב server ולראות מה הפורט שנבחר.