SIK05.rs

Sieci Komputerowe

Programowanie socketów. Różne języki *

Java

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:

Pascal

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:

https://gist.github.com/roroco/11131088