1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy

Podobne dokumenty
Gniazda BSD. komunikacja bezpołączeniowa

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1

Krótkie wprowadzenie do korzystania z OpenSSL

Programowanie Sieciowe 1

Programowanie sieciowe z użyciem interfejsu gniazdek

TIN Techniki Internetowe zima

Komunikacja sieciowa - interfejs gniazd

Przykład aplikacji UDP

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Programowanie sieciowe z użyciem interfejsu gniazdek

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Sieciowa komunikacja procesów - XDR i RPC

2. Interfejs gniazd Gniazdo

Programowanie sieciowe

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Programowanie Proceduralne

Programowanie przy użyciu gniazdek

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

1. Kolejki komunikatów POSIX

Programowanie z wykorzystaniem gniazd

1. Model klient-serwer

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Sockety TCP/IP - podstawy. Sieci Komputerowe II Wyk ład 2

Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.

iseries Programowanie z użyciem gniazd

Kolejki komunikatów POSIX

Podstawowe typy serwerów

Internet Control Message Protocol Aplikacja ping

Wstęp do programowania 1

Programowanie sieciowe

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Unix: programowanie sieciowe

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl)

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wstęp do programowania 1

W różnych systemach definicje mogą się różnić od powyższej. W linuxie sprobuj man 7 ip do wyswietlenia opisu.

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Uzupełnienie dot. przekazywania argumentów

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

5 Przygotował: mgr inż. Maciej Lasota

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Argumenty wywołania programu, operacje na plikach

Architektura typu klient serwer: uproszczony klient POP3

Programowanie Programowanie z użyciem gniazd

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:

Pobieranie argumentów wiersza polecenia

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Dariusz Chaberski. UMK Toruń

Programowanie z użyciem RPC

13. Kolejki komunikatów POSIX

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Protokół DNS. Aplikacja dnsquery

Beej s Guide to Network Programming

1. Timery i zdarzenia

7. Sterowanie współbieżnością

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Podstawowe typy serwerów

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

1 Sposób zaliczenia przedmiotu

Podział programu na moduły

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

Rys. 9-1 Procesy P1 i P2 komunikuję się poprzez wspólny obszar. pamięci.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Sygnał mechanizm asynchronicznego powiadamiania procesów o zdarzeniach zwykle awaryjnych.

Tryb bezpołączeniowy (datagramowy)

Iteracyjny serwer TCP i aplikacja UDP

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Protokół UDP UDP (User Datagram Protocol) . [

IBM i Wersja 7.2. Programowanie Programowanie z użyciem gniazd

Struktury czyli rekordy w C/C++

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Sygnały i ich obsługa

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Część 4 życie programu

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

1. Kolejki komunikatów POSIX

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Transkrypt:

1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy Należy znaleźć liczby pierwsze w zakresie od 2 do N na P komputerach. Zarządca pocz[i], kon[i] wykonawca 1 wykonawca i liczb[i] komunikaty wykonawca n Przykład 1 Znajdowanie liczb pierwszych, model zarządca- wykonawca

Zarządca Start Wykonawca Start czytaj dane zakres podzial msg.typ = GOTOWY receive(&msg,...) send(&msg,...) GOTOWY msg.typ WYNIK receive(&msg,...) liczb = liczb + msg.wynik LICZ msg.typ STOP msg.typ = LICZ msg.pocz =... msg.kon =... send(&msg,...) pocz = msg.od; koniec = msg.kon; wyn = znajdz(pocz, koniec); msg.typ = WYNIK; msg.liczb = wyn; stop Stop

// Plik wspolny #define SIZE sizeof(struct sockaddr_in) #define MY_PORT 2001 #define GOTOWY 1 #define WYNIK 2 #define LICZ 3 #define STOP 4 typedef struct { // Komunikat int typ; int numer; int pocz; int kon; int liczb; komunikat_t; Przykład 2 Plik zawierajacy definicje wspolny.h // Znajdowanie liczb pierwszych - zarzadca // Usuchomienie: lp-serw zakres liczba_wezlow // Program wspolpracuje z progr. lp-cli // Komunikacja gniazdka UDP #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include wspolny.h main(int argc, char *argv[]) { int sock, length, i = 0; struct sockaddr_in name; struct sockaddr_in nadawca; int cnt,res,wynik,liczb=0; komunikat_t msg; int dlnad = SIZE; int podzial = atoi(argv[2]); // liczba wezlow int delta=0, start=1; delta = atoi(argv[1])/podzial-1; // Utworzenie gniazdka typu datagram sock = socket(af_inet, SOCK_DGRAM, 0); if (sock < 0) { perror("blad tworzenia gniazdka"); exit(1);

// Ustalenie adresu punktu odbiorczego name.sin_family = AF_INET; name.sin_addr.s_addr = INADDR_ANY; name.sin_port = htons(my_port); if(bind(sock, &name, SIZE)) { perror("blad tworzenia adresu"); exit(1); do { // Odbior zgloszenia --------------------- res = recvfrom(sock,&msg,sizeof(msg),0,&nadawca,&dlnad); if(res < 0) perror("odbior"); printf("odebrano: %d %d \n",res,msg.typ); if((msg.typ == GOTOWY) (msg.typ == WYNIK)) { // Zlecamy prace msg.typ = LICZ; msg.pocz = delta*i; msg.kon = delta*(i+1) - 1 ; msg.numer = i; printf("zlecenie od: %d do: %d\n",msg.pocz, msg.kon); if(i >= podzial) break; i=i+1; if(msg.typ == WYNIK) { // Odbieramy wynik liczb = wynik + msg.liczb; printf("liczb: %d\n",liczb); // Wysylamy polecenie ------- res = sendto(sock,&msg,sizeof(msg),0,&nadawca,dlnad); if(res < 0) { perror("send"); printf("wyslano %d\n",res); while(1); printf( Liczb pierwszych: %d\n,liczb); close(sock); Przykład 3 Znajdowanie liczb pierwszych proces zarządzający

// Znajdowanie liczb pierwszych program wykonawczy // Usuchomienie: lp-cli adres_zarzadcy moj_numer // Program wspolpracuje z progr. lp-serw // Komunikacja gniazdka UDP #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdlib.h> #include wspolny.h main(int argc,char *argv[]) { int sock; struct sockaddr_in name; struct hostent *hp, *gethostbyname(); struct sockaddr nadawca; struct sockaddr_in klient; int cnt,res,moj_numer,i=0; int dlnad = SIZE; komunikat_t msg; moj_numer = atoi(argv[2]); // Utworzenie gniazdka typu internet, datagram sock = socket(af_inet, SOCK_DGRAM, 0); if (sock < 0) { perror("blad tworzenia gniazdka"); exit(1); printf("gniazdko %d\n",sock); // Ustalenie adresu gniazdka tego procesu --- klient.sin_family = AF_INET; klient.sin_addr.s_addr = INADDR_ANY; klient.sin_port = INADDR_ANY;; if(bind(sock, &klient, SIZE)) { perror("blad tworzenia adresu"); exit(1);

// Ustalenie adresu docelowego ------------ hp = gethostbyname(argv[1]); if (hp == 0) { printf("%s: unknown host\n", argv[1]); exit(2); memcpy(&name.sin_addr, hp->h_addr, hp->h_length); name.sin_family = AF_INET; name.sin_port = htons(my_port); printf("adres docelowy: %s\n",inet_ntoa(name.sin_addr)); msg.typ = GOTOWY; msg.numer = moj_numer; msg.liczb = 0; for(cnt=0; cnt<10; cnt++) { // Wysylanie komunikatu / zgloszenia ------------------ printf("wyslano komunikat: %d\n",msg.typ); res = sendto(sock, &msg, sizeof(msg),0, &name, sizeof(name)); if(res < 0) { perror("wysylanie"); break; printf("wyslano %d %d\n",res,msg.typ); // Odbior zlecenia ----- res = recvfrom(sock, &msg,sizeof(msg),0,&nadawca,&dlnad); if(res < 0) perror("odbior"); printf("odebrano %d %d z %d\n",res,msg.typ,msg.numer); if(msg.typ == LICZ) { // Obliczenia printf("obliczenia od %d do %d\n",msg.pocz,msg.kon); msg.liczb = znajdz(msg.pocz,msg.kon); printf("znaleziono %d liczb\n",msg.liczb); msg.typ = WYNIK; if(msg.typ == STOP) { // zakonczenie break; close(sock);

// Procedura stwierdza ile liczb pierwszych jest w przedziale int znajdz(int od, int kon) { int i,j,liczb = 0, pierwsza; for(j = od; j< kon; j++) { pierwsza = 1; for(i=2;i*i <=j;i++) { if((j%i) == 0) { pierwsza = 0; break; if(pierwsza) liczb++; return liczb; Przykład 4 Znajdowanie liczb pierwszych proces wykonawczy