Maximální počet bodů | 4 bodů |
Způsob komunikace s aplikací | Parametry předané při spuštění + standardní vstup |
Způsob testování aplikace | Na základě odesílaných zpráv po síti + standardní výstup |
Implementujte telnet klienta, který vytvoří soket pro komunikaci s jiným telnet klientem na specifikované IP adrese a portu. Následně na tento soket bude posílat vše, co uživatel napíše na standartní vstup System.in. Na standartní výstup System.out bude vypisovat vše, co odpoví komunikující protistrana. Tento text vypisujte v nepozměněné formě.
- Program bude přijímat IP adresu a port jako parametry při spouštění aplikace.
- Zamezte blokování při operaci InputStream.read() pomocí volání InputStream.available(). Snižte zátěž CPU ve smyčce aktivního čekání pomocí volání Thread.sleep(20).
- Implementujte příjem a odesílání znaků ze Soketu v nezávislých vláknech.
- Zpráva bude odeslána ve chvíli, kdy uživatel zmáčkne na klávesnici ENTER
- Pokud uživatel napíše "/QUIT" a zmáčkne ENTER, aplikace ukončí spojení a ukončí se.
Aplikaci telnet klienta můžete vyzkoušet například s využitím nástroje netcat, kdy následujícím příkazem na localhostu spustíte server, ke kterému se váš klient připojí.
nc -lv 127.0.0.1 4444
package main.java.utb.fai;
import java.io.*;
import java.net.*;
public class TelnetClient {
private String serverIp;
private int port;
public TelnetClient(String serverIp, int port) {
this.serverIp = serverIp;
this.port = port;
}
public void run() {
try {
Socket socket = new Socket(serverIp, port);
// Implementation of receiving and sending data
// Implement processing of input from the user and sending data to the server
// Implement response processing from the server and output to the console
} catch (IOException e) {
e.printStackTrace();
}
}
}
V hlavní třídě main implementujte zpracování vstupních parametrů, které jsou aplikaci předávány při spuštění.
- args[0] - IP adresa klienta, se kterým bude naše aplikace komunikovat (String)
- args[1] - Číslo portu, na kterém bude aplikace komunikovat. Standardně 23 pro telnet. (int)
package main.java.utb.fai;
public class App {
public static void main(String[] args) {
// TODO: Implement input parameter processing
TelnetClient telnetClient = new TelnetClient("127.0.0.1", 23);
telnetClient.run(); // run telnet client
}
}
Poznámka: Implementace a struktura kódu aplikace je libovolná a je zcela na vás, jak tento problém vyřešíte. Je však důležité, aby aplikace splňovala zadané požadavky.
Vaše implementace bude hodnocena na základě chování aplikace při testování různých scénářů. Automatizovaný testovací nástroj bude předávat vaší aplikaci různé parametry, včetně platných a neplatných, aby otestoval její chování za různých podmínek. V případě testování síťové komunikace mezi více klienty, testovací nástroj bude vytvářet virtuální klienty/servery za účelem ověření funkcionality.
Výsledné hodnocení bude záviset na celkovém počtu úspěšných testovacích případů. Počet bodů získaných z úlohy bude tedy záviset na celkové úspěšnosti při testování. Váš výsledný počet bodů bude určen následujícím vzorcem.
VP = MB * (UT / CPT)
- VP: Výsledný počet bodů.
- MB: Maximální počet bodů pro danou úlohu.
- UT: Počet úspěšných testovacích případů.
- CPT: Celkový počet testovacích případů.
Automatizované hodnocení můžete spustit lokálně za účelem ověření funkčnosti vaší aplikace. K tomu slouží předpřipravený skript, který je dostupný v repozitáři tohoto úkolu. Výsledný report testování se bude nacházet v souboru test_report.html
.
Spusťte skript s názvem run_local_test.sh
.
Spusťte skript s názvem run_local_test.bat
.