Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:unix:lab_prog_siec [2016/12/15 20:43]
kkutt [DO PRZYGOTOWANIA]
pl:dydaktyka:unix:lab_prog_siec [2019/06/27 15:50] (aktualna)
Linia 2: Linia 2:
 ===== DO PRZYGOTOWANIA ===== ===== DO PRZYGOTOWANIA =====
   * Proszę przypomnieć sobie użycie ''​[[http://​home.agh.edu.pl/​~gjn/​dydaktyka/​UGLX/​node11.html#​SECTION000117000000000000000|fork()]]''​   * Proszę przypomnieć sobie użycie ''​[[http://​home.agh.edu.pl/​~gjn/​dydaktyka/​UGLX/​node11.html#​SECTION000117000000000000000|fork()]]''​
-  * Proszę poczytać opis podstaw gniazd sieciowych (socketów) z [[http://​www.linuxpl.org/​LPG/​node1.html|The Linux Programmer'​s Guide]]. Konkretnie sekcję [[http://​www.linuxpl.org/​LPG/​node81.html|Gniazda sieciowe - podstawy]] oraz jej podsekcje: "​Podstawowe funkcje",​ "TCP: SOCK_STREAM",​ "​SOCK_DGRAM (UDP)",​ "​PF_UNIX",​ "​SOCK_RAW i PF_PACKET"​+  * Proszę poczytać opis podstaw gniazd sieciowych (socketów) z [[https://​web.archive.org/​web/​20170405054449/​http://​www.linuxpl.org/​LPG/​node1.html|The Linux Programmer'​s Guide]]. Konkretnie sekcję [[https://​web.archive.org/​web/​20170305021856/​http://​www.linuxpl.org:80/​LPG/​node81.html|Gniazda sieciowe - podstawy]] oraz jej podsekcje: "​Podstawowe funkcje",​ "TCP: SOCK_STREAM",​ "​SOCK_DGRAM (UDP)",​ "​PF_UNIX",​ "​SOCK_RAW i PF_PACKET"​
  
 ===== WPROWADZENIE ===== ===== WPROWADZENIE =====
Linia 137: Linia 137:
 ==== Programowanie gniazd ==== ==== Programowanie gniazd ====
 Przeglądnąć artykuł: Przeglądnąć artykuł:
-[[http://​beej.us/​guide/​bgnet/output/html/singlepage/​bgnet.html|Beej'​s Guide to Network Programming]]+[[http://​beej.us/​guide/​bgnet/​html/​single/​bgnet.html|Beej'​s Guide to Network Programming]]
  
 Skompilować i przetestować omówione w nim programy, w tym: Skompilować i przetestować omówione w nim programy, w tym:
Linia 195: Linia 195:
 } }
 </​file>​ </​file>​
-  - Sprawdzić działanie programu dla ''​www.google.com''​ oraz innych wybranych adresów symbolicznych.+  - Sprawdzić działanie programu dla ''​<​nowiki>​www.yahoo.com</​nowiki>​''​ oraz innych wybranych adresów symbolicznych.
   - Dopisać instrukcje, które szczegółowo sprawdzają typ błędu funkcji ''​gethostbyname''​ i w zależności od tego wyświetlają odpowiedni komunikat.   - Dopisać instrukcje, które szczegółowo sprawdzają typ błędu funkcji ''​gethostbyname''​ i w zależności od tego wyświetlają odpowiedni komunikat.
   - Zmodyfikować tak program aby wyświetlał wszystkie adresy IP odnoszące się do podanego adresu.   - Zmodyfikować tak program aby wyświetlał wszystkie adresy IP odnoszące się do podanego adresu.
Linia 269: Linia 269:
  }  }
  
- while(1) {  // main accept() loop + sin_size = sizeof their_addr;​ 
- sin_size = sizeof their_addr;​ + if ((new_fd = accept(sockfd,​ (struct sockaddr *)&​their_addr,​ &​sin_size)) == -1) { 
- if ((new_fd = accept(sockfd,​ (struct sockaddr *)&​their_addr,​ &​sin_size)) == -1) { + perror("​accept"​);​
- perror("​accept"​);​ +
- continue;​ +
-+
- printf("​server:​ got connection from %s\n",​inet_ntoa(their_addr.sin_addr));​ +
- if (!fork()) { // this is the child process +
- close(sockfd);​ // child doesn'​t need the listener +
- if (send(new_fd,​ "​Hello,​ world!\n",​ 14, 0) == -1) +
- perror("​send"​);​ +
- close(new_fd);​ +
- exit(0);​ +
-+
- close(new_fd); ​ // parent doesn'​t need this+
  }  }
 + printf("​server:​ got connection from %s\n",​inet_ntoa(their_addr.sin_addr));​
 + if (send(new_fd,​ "​Hello,​ world!\n",​ 14, 0) == -1)
 + perror("​send"​);​
 + sleep(5); // just for observing easily that the server cannot serve a few clients concurrently
 + close(new_fd);​
 +
  return 0;  return 0;
 } }
Linia 291: Linia 285:
 === - Komunikator === === - Komunikator ===
   * Należy przerobić powyższy program tak aby działał jako server. Łącząc się za pomocą np. programu //telnet// program powinien umożliwiać prowadzenie dialogu jak popularne komunikatory internetowe (np. gg, tlen, itp).   * Należy przerobić powyższy program tak aby działał jako server. Łącząc się za pomocą np. programu //telnet// program powinien umożliwiać prowadzenie dialogu jak popularne komunikatory internetowe (np. gg, tlen, itp).
 +    * Korzystając z programu telnet można połączyć się z serwerem wpisując: <code sh>$ telnet remotehostname XXX</​code>​ gdzie ''​remotehostname''​ jest nazwą komputera, na którym uruchomiono serwer (''​localhost'',​ jeżeli to ta sama maszyna), a ''​XXX''​ numerem przypisanego do niego portu.
     * Podpowiedź:​ po akceptacji połączenia program powinien utworzyć dwa procesy potomne, jeden do czytania portu, drugi do pisania.     * Podpowiedź:​ po akceptacji połączenia program powinien utworzyć dwa procesy potomne, jeden do czytania portu, drugi do pisania.
  
pl/dydaktyka/unix/lab_prog_siec.1481830986.txt.gz · ostatnio zmienione: 2019/06/27 15:55 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0