Echo server v2
Täienda echo serverit.
- Server peab suutma paralleelselt teenindada mitut klienti (üks thread per socket).
- Server peab vastu võtma kahte tüüpi sõnumeid
- echo-request, mis sisaldab teksti. vastuseks tuleb saata sama tekst.
- file-request, mis sisaldab failinime. kui faili nimi on absolute path või faili ei leita, siis saata vastuseks error. muidu tuleb saata vastuseks faili sisu. faile peaks otsima working directoryst (sealt, kus server käivitati).
- Server võtab ühenduse vastu ja loeb requestide arvu (int). Seejärel loeb server kliendilt esimese requesti ja saadab sellele response. Seejärel loeb järgmise requesti ja saadab sellele response jne.
- Client käsurea parameetritega saab määrata, mis requeste ja mis järjekorras saadetakse. Käsurea parameetrid käivad paari kaupa: kõigepealt "file" või "echo" ja seejärel faili nimi või sõnumi sisu. Käsurida võib sisaldada mitu paari, nt
file shire.txt echo rivendell file mordor.jpg
. - Client saadab kõigepealt serverile requestide koguarvu. Seejärel saadab esimese requesti ja töötleb response. Seejärel saadab järgmise requesti ja töötleb response jne. Vastuvõetud failid salvestada kausta "received".
- Suhtluses tuleb kasutada mõistlikku süntaksi. Iga request peaks algama arvuga, mis näitab requesti tüüpi. Iga response peaks algama arvuga, mis näitab staatust (ok, error). Kõik variable length andmed peaks algama length prefixiga.
Vihje: kasulikud meetodid: Path.isAbsolute, Files.isRegularFile, Files.readAllBytes, Files.write
Vihje: socketi peaks sulgema see thread, mis viimasena socketiga midagi toimetab. kasuta try-with-resources:
AutoCloseable someResource; // field void method() { try (someResource) { someResource.use(); } // someResource pannakse kinni }