Przykład, server zamieniający komunikat na wielkie litery:
import java.io.*;
import java.net.*;
class tcp
{
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("Received: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
}
}
}
Klient, przykład:
import java.io.*;
import java.net.*;
/**
* Usage:input a string, server will return a value.
**/
class TCPClient {
public static void main(String argv[]) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
Więcej przykładów w Javie:
Zadanie (10 pkt)
Zadaniem Państwa jest napisanie programu grającego w grę kółko i krzyżyk na planszy 5x5, gdzie wygrywającymi układami są proste poziome, pionowe oraz przekątne. Państwa program gra z komputerem a w przypadku remisu na koniec gry, jest on traktowany jak Państwa wygrana.
Serwer za każdym połączeniem rozgrywa po 50 gier i zadaniem Państwa programu jest wygranie co najmniej 40 z nich.
Klient musi komunikować się z serwerem zgodnie z poniższym protokołem. Uwaga! można wykorzystać program netcat do połączenia z serwerem i sprawdzenia jak on działa.
Na powitanie Serwer przesyła komunikat:
WELCOME, STATE YOUR NAME
I oczekuje od klienta na wysłanie Swojego loginu w postaci
LOGIN imie_nazwisko
Każdy poprawnie odebrany i sparsowany komunikat przez serwer potwierdzany jest komunikatem OK, każdy błędny komunikat oznaczany jest przez serwer poprzez przesłanie do klienta ERROR.
Następnie serwer czeka na spis ruchów użytkownika w postaci:
MOVE nr między 0 a 24
Uwaga! Planszę traktujemy jako zapisaną w postaci - pierwszy wiersz to pola 0..4, drugi wiersz pola 5..9, itd.
W przypadku wysłania ruchu na już zajęte pole otrzymujemy komunikat ERROR.
W odpowiedzi na ruch klienta wysyłany jest albo ruch przeciwnika (który gra całkowicie losowo) postaci:
OPPONENT nr między 0 a 24
Albo komunikat o wygranej
WIN
albo komunikat o przegranej
LOST
Po wygranej lub przegranej przesyłany jest także komunikat o rozpoczęciu nowej gry
NEW GAME
I następnie serwer oczekuje na ruch użytkownika w nowej grze.
Po zakończeniu 50 gier użytkownik powiadamiany jest o wykonaniu zadania - komunikat "SUCCESS" lub porażce - komunikat "FAILED" i serwer kończy komunikację z użytkownikiem (zamyka socket).
W przypadku sukcesu państwa login zapisywany jest do pliku.
SERVER działa pod adresem: 150.254.78.69, na porcie 7878. Uwaga! Serwer jest dostępny z sieci wydziałowej, w przypadku połączenia z domu państwa sieć lokalna pewnie nie pozwoli na nawiązanie skutecznej komunikacji. Implementacja serwera dostępna jest tutaj:
uruchomienie:
java -jar SIK-1.0-SNAPSHOT.jar
Może posłużyć do lokalnych testów, ale ostatecznie w celu uzyskania punktów należy połączyć się z serwerem prowadzącego!
W przypadku gdy coś nie będzie działać proszę o kontakt mailowy.
Aby sprawdzić czy udało nam się wykonać zadanie można wejść na stronę
UWAGA! proszę przesłać po rozwiązaniu zadania pusty plik poprzez serwis:
Rozwiązanie zadania proszę przesłać do 09.XI.2018 godz. 23.59 przez stronę:
Żebym mógł Państwu wpisać punkty.
Wykorzystano materiały z: