Quel numéro de port utiliser pour du code client-serveur local sur la même machine ?
Lorsqu'on écrit un client et un serveur qui communiquent sur le même hôte, utilisez l'adresse de boucle locale (127.0.0.1 pour IPv4, ::1 pour IPv6) et choisissez n'importe quel port non privilégié (1024-65535) pas déjà utilisé.
Conventions courantes
- Serveurs dev : 3000 (React, Express), 8000 (Django), 8080 (proxy), 5000 (Flask), 4200 (Angular), 5173 (Vite).
- Bases de données : 5432 (PostgreSQL), 3306 (MySQL), 27017 (MongoDB), 6379 (Redis).
- Apps perso : Choisissez un port haut aléatoire (ex. 12345, 54321) pour éviter collisions.
Extraits de code
Python (socket)
# server.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 12345)) # loopback + port
s.listen()
conn, addr = s.accept()
print(conn.recv(1024).decode())
conn.sendall(b'Pong')
conn.close()
# client.py
import socket
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(('127.0.0.1', 12345))
c.sendall(b'Ping')
print(c.recv(1024).decode())
c.close()
Node.js (net)
// server.js
const net = require('net');
const server = net.createServer(socket => {
socket.on('data', data => socket.write('Pong'));
}).listen(12345, '127.0.0.1');
// client.js
const net = require('net');
const client = net.connect({port: 12345, host: '127.0.0.1'}, () => {
client.write('Ping');
});
client.on('data', data => console.log(data.toString()));
Points clés
- 127.0.0.1 est une adresse IP, pas un port. Le port est le second argument (ex. 12345).
- Lier à
0.0.0.0expose le serveur au LAN – utilisez127.0.0.1pour local seulement. - Ports < 1024 nécessitent root/admin (privilégiés).
- Vérifiez disponibilité :
lsof -i :12345(macOS/Linux) ounetstat -ano | findstr :12345(Windows). - Pare-feu : autorise généralement loopback par défaut.
Choisissez un port libre >1023, liez à 127.0.0.1, et c'est parti.
