Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja | |||
sk2:sockets_intro [2024/10/02 13:47] jkonczak [Hello world] |
sk2:sockets_intro [2024/10/07 20:27] (aktualna) jkonczak |
||
---|---|---|---|
Linia 35: | Linia 35: | ||
Interface obsługi gniazd BSD jest bardzo zbliżony do API specyfikowanego przez POSIX do obsługi plików (który znacie z PSiW). \\ <html><small> BSD socket API został przyjęty jako standard przez większość systemów operacyjnych, m. inn. został bez większych zmian wpisany w standard POSIX.</small></html> | Interface obsługi gniazd BSD jest bardzo zbliżony do API specyfikowanego przez POSIX do obsługi plików (który znacie z PSiW). \\ <html><small> BSD socket API został przyjęty jako standard przez większość systemów operacyjnych, m. inn. został bez większych zmian wpisany w standard POSIX.</small></html> | ||
- | //Zadanie 1.// Napisz program który otworzy plik o nazwie 'date' i wypisze jego zawartość. Poniżej "pusty" plik źródłowy. Pomiń obsługę błędów. (Jeśli nie wiesz skąd wziąć plik ''date'', wpisz w konsolę: ''date>date'' .) \\ Do obsługi pliku i standardowego wejścia / wyjścia użyj funkcji ''open'', ''read'', ''write'' i ''close''. \\ | + | ~~Zadanie.#~~ Napisz program który otworzy plik o nazwie 'date' i wypisze jego zawartość. Poniżej "pusty" plik źródłowy. Pomiń obsługę błędów. (Jeśli nie wiesz skąd wziąć plik ''date'', wpisz w konsolę: ''date>date'' .) \\ Do obsługi pliku i standardowego wejścia / wyjścia użyj funkcji ''open'', ''read'', ''write'' i ''close''. \\ |
Opis funkcji znajdziesz na stronach podręcznika systemowego (np. ''man open''). | Opis funkcji znajdziesz na stronach podręcznika systemowego (np. ''man open''). | ||
<file cpp z1.cpp> | <file cpp z1.cpp> | ||
Linia 47: | Linia 47: | ||
</file> | </file> | ||
- | //Zadanie 2.// Co trzeba dodać do obsłużenia błędów? | + | ~~Zadanie.#~~ Co trzeba dodać do obsłużenia błędów? |
==== Adresacja połączeń na warstwie transportu ==== | ==== Adresacja połączeń na warstwie transportu ==== | ||
- | //Zadanie 3.// Jakie adresy (numery) są potrzebne by móc przesłać wiadomość do konkretnego programu na wybranym komputerze? | + | ~~Zadanie.#~~ Jakie adresy (numery) są potrzebne by móc przesłać wiadomość do konkretnego programu na wybranym komputerze? |
Przypomnienie programów ''netcat'' / ''socat'' oraz programów ''netstat'' / ''ss'' ([[sk1:transport#monitorowanie_biezacych_polaczen|link do materiałów z SK1]]) | Przypomnienie programów ''netcat'' / ''socat'' oraz programów ''netstat'' / ''ss'' ([[sk1:transport#monitorowanie_biezacych_polaczen|link do materiałów z SK1]]) | ||
- | //Zadanie 4.// Prześlij między sobą dowolny tekst używając programu ''netcat'' lub ''socat'' | + | ~~Zadanie.#~~ Prześlij między sobą dowolny tekst używając programu ''netcat'' lub ''socat'' |
- | //Zadanie 5.// Nawiąż połączenie na port 13 (daytime) twojego komputera. \\ | + | ~~Zadanie.#~~ Nawiąż połączenie na port 13 (daytime) twojego komputera. \\ |
<html><small></html>Jeżeli używasz własnego komputera i port 13 nie odpowiada, uruchom i pozostaw działającą w osobnym terminalu komendę \\ ''socat tcp-listen:1313,fork,reuseaddr exec:date'' i do tego oraz dalszych ćwiczeń używaj port 1313.<html></small></html> | <html><small></html>Jeżeli używasz własnego komputera i port 13 nie odpowiada, uruchom i pozostaw działającą w osobnym terminalu komendę \\ ''socat tcp-listen:1313,fork,reuseaddr exec:date'' i do tego oraz dalszych ćwiczeń używaj port 1313.<html></small></html> | ||
Linia 120: | Linia 120: | ||
==== "Hello world" ==== | ==== "Hello world" ==== | ||
- | //Zadanie 6.// Zmień program do odczytu pliku tak, by zamiast funkcji ''open(…)'': | + | ~~Zadanie.#~~ Zmień program do odczytu pliku tak, by zamiast funkcji ''open(…)'': |
* tworzył funkcją ''socket(…)'' gniazdo: | * tworzył funkcją ''socket(…)'' gniazdo: | ||
* domeny komunikacyjnej protokołu IPv4 – stała ''PF_INET'' (zamiennie ''AF_INET'') | * domeny komunikacyjnej protokołu IPv4 – stała ''PF_INET'' (zamiennie ''AF_INET'') | ||
Linia 144: | Linia 144: | ||
</code> | </code> | ||
- | //Zadanie 7.// Przekształć poprzedni program tak, by czytał z adresu IP i portu podanego w argumentach programu. | + | ~~Zadanie.#~~ Przekształć poprzedni program tak, by czytał z adresu IP i portu podanego w argumentach programu. |
- | //Zadanie 8.// Dodaj do programu obsługę błędów zwracanych przez funkcje ''connect'' i ''read''. | + | ~~Zadanie.#~~ Dodaj do programu obsługę błędów zwracanych przez funkcje ''connect'' i ''read''. |
- | //Zadanie 9.// Zmień IP na losowe (tak, by nie odpowiadało na próbę połączenia). Programem ''netstat -tnp'' / ''ss -tnp'' wyświetl utworzone połączenie. | + | ~~Zadanie.#~~ Zmień IP na losowe (tak, by nie odpowiadało na próbę połączenia). Programem ''netstat -tnp'' / ''ss -tnp'' wyświetl utworzone połączenie. |
==== Funkcje send/recv/… ==== | ==== Funkcje send/recv/… ==== | ||
Linia 165: | Linia 165: | ||
</small> | </small> | ||
- | //Zadanie 10.// Zmień program tak, by zamiast ''read(…)'' używał funkcji ''recv(…)'' | + | ~~Zadanie.#~~ Zmień program tak, by zamiast ''read(…)'' używał funkcji ''recv(…)'' |
<small> | <small> | ||
- | //Zadanie 11.// Przed wywołaniem ''connect'' ustal lokalny adres funkcją ''bind''. Powtórz zadanie 8 i 9. | + | ~~Zadanie.#~~ Przed wywołaniem ''connect'' ustal lokalny adres funkcją ''bind''. Powtórz zadanie 8 i 9. |
</small> | </small> |