feat(core): Gnutella search and download after Java, measured against Java

GnutellaRun adds a line of four peers: a search goes on as a query, each
peer answers with a hit for each matching file and the hits come back the
way the query came; a hit's file is fetched by HTTP on port 6346. The
file type names of the model move from the project export and import into
the core, so that the download uses them too.

Departures from Java: a peer that sent hits keeps its connection, so that
the hits of farther peers come back too (Java closes it and loses them),
and sizes are in characters.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 14:59:26 +00:00
co-authored by Claude Opus 5.5
parent b4a95e6cac
commit ce5b10c1f3
13 changed files with 39934 additions and 130 deletions
+31
View File
@@ -905,6 +905,37 @@ Gemessen (02.10.2026):
herum, einige zehn Millisekunden auseinander: Javas Thread-Takt über
mehrere Sprünge.
## Gnutella, Suche und Download (F3.6b)
Zwei weitere Abläufe von `GnutellaRun`: die Teilnehmer bilden über ihre
Höchstzahlen eine Linie .20 – .30 – .31 – 10.0.0.2; .31 teilt
`notizen.txt` (in `searchBoth` auch `lied.txt`), 10.0.0.2 `Lied der
Woche.txt`. Geschrieben werden zusätzlich die Suchergebnisse bei jeder
Meldung und am Ende die Dateien in `/peer2peer` jedes Programms.
Gemessen (02.10.2026):
* Suche (`sucheDatei`): die Ergebnisse geleert, eine Query
`guid//0x80//0//8//Bits//1//Worte` (ein leeres Feld als ein Leerzeichen)
über je eine neue Verbindung an jeden Teilnehmer außer sich selbst. Wer
sie noch nicht kennt, schickt sie (hops+1, ttl−1) an seine Teilnehmer
außer dem Absender und antwortet für jede Datei in `/peer2peer`, deren
Name die Worte enthält (Groß/klein egal), mit einem Treffer
`guid//0x81//0//8//Bits//Anzahl//6346//IP//2//Name: Größe B// `; die
Bitlänge rechnet Java, bevor der Name eingetragen ist. Treffer gehen
(hops+1, ttl−1) zurück wie Pongs; das Ergebnis heißt `IP/Name: Größe B`,
jedes einmal.
* Fehler Javas: wer selbst Treffer schickt, schließt danach die
Verbindung; die Treffer der Teilnehmer, an die er die Query
weitergeschickt hat, gehen verloren (`searchBoth`: der von 10.0.0.2). Die
Größe ist wieder die des Base64-dekodierten Textes („Hallo Welt“ = 6 B),
ebenso die Bytes im Pong.
* Download (`herunterladenDatei`): `GET Name HTTP/1.1` mit `Host:` an Port
6346 des Rechners (der Name bis zum `:`, Leerzeichen kodiert), Antwort
`HTTP/1.1 200 OK` mit `Content-type:` gleich dem Dateityp und dem Inhalt,
sonst `HTTP/1.1 404 Not Found`; die Datei landet in `/peer2peer`, die
Verbindung schließt der Client nach der Antwort.
## Datei-Explorer, Texteditor, Bildbetrachter (F3.5b)
`FileCases` tut, was die Fenster dieser Programme mit den Dateien eines