Ich möchte die an einem bestimmten TCP-Port ankommenden Daten unbegrenzt lesen
Das macht eigentlich keinen Sinn ... wenn Sie nach allen Daten, die an einem UDP-Port ankommen, waren, dann ist es gut - TCP ist jedoch ein verbindungsbasiertes Protokoll. Sobald sich ein Client verbindet, erhalten Sie accept()
zwei Sockets - einen, der mit dem Client verbunden ist, und einen, der nc
mit dem Client verbunden ist. Der ursprüngliche Abhörsockel wird geschlossen, und der Client wird in Einzelgespräche geführt.
Wenn Sie auf mehrere Clients zugreifen möchten, die eine Verbindung herstellen, versuchen Sie es mit socat
:
socat TCP-LISTEN:12345,fork FD:1 >> ../myfile
Dadurch wird ein Abhörsockel eingerichtet und beim Verbindungsaufbau ein neuer Prozess eingeleitet - der Abhörsockel bleibt hörbar. Alle empfangenen Daten werden in stdout (Dateideskriptor 1
) geschrieben, zu dem ../myfile
zum Anhängen weitergeleitet wird.
ANMERKUNG : Daten werden von einer beliebigen Anzahl von Clients empfangen, und zwar in keiner garantierten Reihenfolge ohne Framing ... dh: Es ist ein Durcheinander von verworrenen Daten, wenn Sie mehr als einen Client gleichzeitig haben.
Wenn Sie socat
die Datei für Sie bearbeiten möchten, können Sie eines von CREATE
oder verwenden OPEN
(siehe Manpage ):
socat TCP-LISTEN:12345,fork OPEN:../myfile,append
Wenn Sie mit einem Ansatz für jeweils einen Client zufrieden sind, fügen Sie nc
eine Schleife ein:
while :; do nc -l 12345; done >> ../myfile
Testen Sie dies mit nc
:
nc localhost 12345