Quale Numero di Porta Usare per il Codice Client-Server Locale sulla Stessa Macchina?
Quando scrivi un client e un server che comunicano sulla stessa macchina, usa l'indirizzo di loopback (127.0.0.1 per IPv4, ::1 per IPv6) e scegli qualsiasi porta non privilegiata (1024–65535) non già in uso.
Convenzioni Comuni
- Server di sviluppo: 3000 (React, Express), 8000 (Django), 8080 (proxy), 5000 (Flask), 4200 (Angular), 5173 (Vite).
- Database: 5432 (PostgreSQL), 3306 (MySQL), 27017 (MongoDB), 6379 (Redis).
- App personalizzate: Scegli una porta alta casuale (es. 12345, 54321) per evitare collisioni.
Snippet di Codice
Python (socket)
# server.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 12345)) # loopback + porta
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()));
Punti Chiave
- 127.0.0.1 è un indirizzo IP, non una porta. La porta è il secondo argomento (es. 12345).
- Il binding su
0.0.0.0espone il server alla LAN—usa127.0.0.1solo per uso locale. - Le porte < 1024 richiedono root/admin (privilegiate).
- Controlla disponibilità:
lsof -i :12345(macOS/Linux) onetstat -ano | findstr :12345(Windows). - Firewall: di solito consente il loopback di default.
Scegli una porta libera >1023, fai il binding su 127.0.0.1, e sei a posto.