Voglio leggere i dati che arrivano su una porta TCP specifica a tempo indeterminato
Questo non ha davvero senso ... se stavi cercando tutti i dati che arrivano su una porta UDP, allora va bene - TCP è comunque un protocollo basato sulla connessione. Una volta che un client si connette e tu accept()
finisci con due socket: uno in ascolto e uno connesso al client ... nc
chiuderai il socket di ascolto originale e gestirai uno contro uno con il client.
Se desideri essere in grado di ascoltare la connessione di più client, prova a utilizzare socat
:
socat TCP-LISTEN:12345,fork FD:1 >> ../myfile
Ciò imposterà una presa di ascolto e interromperà un nuovo processo sulla connessione - mantenendo in ascolto la presa di ascolto. Tutti i dati ricevuti verranno scritti su stdout (descrittore di file 1
), che viene reindirizzato ../myfile
per l'aggiunta.
NOTA : i dati verranno ricevuti da qualsiasi numero di client, in nessun ordine garantito senza inquadramento ... ovvero: sarà un casino di dati confusi se hai più di un client alla volta.
Se vuoi socat
gestire il file per te, puoi usare uno CREATE
o OPEN
(vedi la pagina man ):
socat TCP-LISTEN:12345,fork OPEN:../myfile,append
Se ti accontenti di un approccio " un client alla volta ", inserisci nc
un ciclo:
while :; do nc -l 12345; done >> ../myfile
Prova questo con nc
:
nc localhost 12345
-v
e-p
?