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 200 gier i zadaniem Państwa programu jest wygranie co najmniej 175 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 200 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 8787. 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.

In ENGLISH:

Task (10 pkt)

Your task is to write a program that will play tic tac toe game on a board of the size 5x5. Winning positions are horizontal, vertical or diagonal lines. If the game ends in a draw (all fields are filled) then it is treated as your WIN.

Every new connection to serwer trigger 200 games and your task is to win at least 175 of them.

Your program has to follow given protocol in communication with the server. Notice! You can use netcat to test the connection and the serwer respense and to understand how it works.

After connecting serwer send you following message

WELCOME, STATE YOUR NAME

Then the serwer waits for a command

LOGIN first_name_second_name

Every valid message is confirmed with the message OK and every incorrect message gives ERROR response.

Next server waits for a message of the form

MOVE (number between 0 and 24)

EXAMPLE:

MOVE 12

Please notice that the board is represent by the numbers from 0 to 24, where 0..4 represents the first row, 5..9 represents the second row etc.

Please notice that in a response to move to already occupied field server will respond with ERROR.

As a response server send the move of the computer player (this player players totally randomly) of the form:

OPPONENT (number between 0 and 24)

or message about the win (it your message triggers the win)

WIN

or message about the loss

LOST

After the WIN or LOST message immediately send message about new game of the form:

NEW GAME

And after that server waits for new client move in a new game.

Right after finishing 200 games user gets a message

SUCCESS

or

FAILED

depends on whether he/she succeed in winning at least 175 games, and then the connection is closed.

You data are automatically save into a file.

SERVER works on address: 150.254.78.69, on port 8787. Important! Server is accessed in faculty network (from computers on campus). In the case of attempt to connect from home your home local network might not allowed you to connect to server.

Server implementation (for test purposes) can be download from

command to run:

java -jar SIK-1.0-SNAPSHOT.jar

Remember that no matter how good you are locally, you still need to succeed on serwer 150.254.78.69

UWAGA! proszę przesłać po rozwiązaniu zadania pusty plik poprzez serwis:

Important! please send an empty file to

Żebym mógł Państwu wpisać punkty.

So that I can write points for the task.

*

Wykorzystano materiały z:

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