Maximální počet bodů | 4 bodů |
Způsob komunikace s aplikací | Parametry předané při spuštění + síťové připojení |
Způsob testování aplikace | Na základě odesílaných zpráv po síti |
Naprogramujte jednoduchý server, který bude schopný přijímat spojení od neomezeného počtu klientů. Server bude vykonávat funkci (tzv. "echo" funkce). To znamená, že zprávu, kterou obdrží od libovolného klienta, mu ji přepošle zpět. Pro obsluhu více klientů vytvořte jedno vlákno pro každé připojení. Jako klienta využijte aplikaci telnet klienta, kterého jste implementovali již v předchozí úloze.
- Server musí být schopen přijímat spojení od neomezeného počtu klientů.
- Pro obsluhu každého klienta bude samostatné vlákno. Implementace ve tříde
ClientThread
. - Klientovi server pošle zpět zprávu, kterou od něj přijme (Echo).
- Možnost omezení počtu vláken s využitím ThreadPoolExecutor.
package utb.fai;
import java.io.*;
import java.net.*;
public class ClientThread extends Thread {
private Socket clientSocket;
public ClientThread(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
// Implementation of processing incoming communication from the telnet client
}
}
V hlavní třídě aplikace implementujte hlavní smyčku serveru. Tedy otevírání nových spojení mezi klientem a serverem. Využijte třídu ServerSocket
. Při spouštění aplikace budou aplikaci serveru předávány následující parametry.
- args[0] - Port, na kterém bude server naslouchat (int)
- args[1] - Maximální počet vláken. V tomto případě číslo bude i odpovídat maximálnímu počtu klientů, kteří budou moci být v jeden okamžik připojení. (int)
package utb.fai;
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class App {
public static void main(String[] args) {
int port = 12345;
int max_threads = 10;
// Implement input parameter processing
// Implementation of the main server loop
ServerSocket serverSocket;
}
}
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
.