Gniazda BSD. komunikacja bezpołączeniowa

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

Programowanie Sieciowe 1

Iteracyjny serwer TCP i aplikacja UDP

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

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

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

Krótkie wprowadzenie do korzystania z OpenSSL

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

Komunikacja sieciowa - interfejs gniazd

Programowanie przy użyciu gniazdek

Programowanie sieciowe

2. Interfejs gniazd Gniazdo

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

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

Podstawowe typy serwerów

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

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

Gniazda BSD implementacja w C#

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

1. Model klient-serwer

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

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

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

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

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

Systemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1

TIN Techniki Internetowe zima

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

Podstawowe typy serwerów

Tryb bezpołączeniowy (datagramowy)

Architektura typu klient serwer: uproszczony klient POP3

iseries Programowanie z użyciem gniazd

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

Programowanie z wykorzystaniem gniazd

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

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

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

Pobieranie argumentów wiersza polecenia

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

Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

Serwer współbieżny połączeniowy

Programowanie Proceduralne

Internet Control Message Protocol Aplikacja ping

Beej s Guide to Network Programming

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

6. Rozbudowany interfejs gniazd

Sieci komputerowe 1 DSRG

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

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

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

socket(int domain, int type, int protocol)

Wstęp do programowania 1

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

4. Algorytmy klienta

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

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

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Zaawansowane operacje wejścia/wyjścia

Uzupełnienie dot. przekazywania argumentów

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Klient-Serwer Komunikacja przy pomocy gniazd

Programowanie sieciowe

Routing. część 1: adresowanie. Sieci komputerowe. Wykład 2. Marcin Bieńkowski

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Gniazda. S. Samolej: Gniazda 1

Programowanie sieciowe z użyciem interfejsu gniazdek

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Zaawansowane operacje wejścia/wyjścia

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

Programowanie Programowanie z użyciem gniazd

TCP - receive buffer (queue), send buffer (queue)

Zaawansowane operacje wejścia/wyjścia

Obsługa plików Procesy

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

Programowanie sieciowe z użyciem interfejsu gniazdek

1 Sposób zaliczenia przedmiotu

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Czy procesor musi się grzać?

Zaawansowane operacje wejścia/wyjścia

Przykład aplikacji UDP

Instytut Teleinformatyki

Podział programu na moduły

[ Odnajdywanie shellcodu w procesach zdalnych. ]

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

PRiR dla maszyn DM i sieci komputerowych. (PRiR, wykład 5)

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Serwery współbieżne c.d.

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

5. Algorytmy serwera

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

KOLEJKI KOMUNIKATÓW IPC

IPC: Kolejki komunikatów

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

Biblioteka standardowa - operacje wejścia/wyjścia

Wstęp do programowania 1

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Gniazda BSD UNIWERSYTET GDAŃSKI WYDZIAŁ MATEMATYKI I FIZYKI. Jacek Nowicki

Transkrypt:

Gniazda BSD komunikacja bezpołączeniowa

Użycie gniazd w transmisji bezpołączeniowej socket() socket() bind() bind() STOP! recv() żądanie send() send() odpowiedź recv() STOP!

recvfrom() #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); gdzie: sockfd otwarte i związane gniazdo, z którego podejmiemy próbę odebrania komunikatu buf wskaźnik na bufor, w którym zostanie umieszczony odebrany komunikat len maksymalna dopuszczalna długość odebranego komunikatu flags MSG_DONTWAIT nie czekaj na nadejście komunikatu MSG_PEEK odbierz komunikat, ale go nie usuwaj z kolejki src_addr struktura gniazda, która zostanie wypełniona danymi nadawcy komunikatu addrlen dana, która odbierze informację o długości struktury gniazda nadawcy wynik: faktyczna długość odebranego komunikatu albo -1 ( errno)

#include <sys/types.h> #include <sys/socket.h> sendto() ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); gdzie: sockfd otwarte gniazdo, przez które podejmiemy próbę wysłania komunikatu buf wskaźnik na bufor zawierający nadawany komunikat len długość nadawanego komunikatu flags MSG_DONTROUTE wyślij wiadomość rozgłoszeniową w sieci lokalnej dest_addr dane odbiorcy komunikatu addrlen długości struktury danych odbiorcy wynik: faktyczna długość nadanego komunikatu albo -1 ( errno)

Napiszemy tandem programowy służący do wymiany prostych komunikatów tekstowych: program listener będzie nasłuchiwał na wskazanym porcie komunikatów nadchodzących od speakera listener zakończy pracę po odebraniu specjalnego komunikatu speaker będzie wysyłał dowolne komunikaty do listenera identyfikowanego adresem IP i numerem portu

listener.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> #include <netdb.h> void die(char *msg) { perror(msg); exit(1);

int main(int argc, char *argv[]) { char line[128]; int listener_port; int sock; struct sockaddr_in HERE; struct sockaddr_in THERE; int len, slen; if(argc!= 2) { fprintf(stderr, "Usage: %s listener_port\n", argv[0]); return 1;

listener_port = strtol(argv[1], NULL, 10); printf("listening from port %d\n", listener_port); sock = socket(af_inet, SOCK_DGRAM, IPPROTO_UDP); if(sock == 1) die("socket"); HERE.sin_family = AF_INET; HERE.sin_port = htons(listener_port); HERE.sin_addr.s_addr = htonl(inaddr_any); memset(here.sin_zero, '\0', 8); if(bind(sock,(struct sockaddr *)&HERE, sizeof(here)) == 1) die("bind");

while((len = recvfrom(sock, line, sizeof(line), 0, (struct sockaddr*)&there, &slen))!= 1) { line[len] = '\0'; printf("message [%s] received from %s\n", line, inet_ntoa(there.sin_addr)); if(strcmp(line,"end") == 0) { puts("terminating message received."); break; close(sock); return 0;

speaker.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> #include <netdb.h> void die(char *msg) { perror(msg); exit(1);

int main(int argc, char *argv[]) { char line[128]; char listener_addr[128]; int listener_port; int sock; struct sockaddr_in THERE; struct hostent *hent; if(argc!= 3) { fprintf(stderr, "Usage: %s listener_addr listener_port\n", argv[0]); return 1;

strcpy(listener_addr, argv[1]); listener_port = strtol(argv[2], NULL, 10); printf("talking to: %s:%d\n", listener_addr, listener_port); sock = socket(af_inet, SOCK_DGRAM, IPPROTO_UDP); if(sock == 1) die("socket"); hent = gethostbyname(listener_addr); if(hent == NULL) die("gethostbyname");

THERE.sin_family = AF_INET; THERE.sin_port=htons(listener_port); THERE.sin_addr=*((struct in_addr*)hent >h_addr); memset(there.sin_zero, '\0', 8); puts("enter messages, Ctrl D to stop..."); while(fgets(line, sizeof(line), stdin)) { line[strlen(line) 1] = '\0'; if(sendto(sock, line, strlen(line), 0, (struct sockaddr *)&THERE, sizeof(there)) == 1) die("sendto"); printf("message [%s] sent\n", line);

if(sendto(sock, "END", 3, 0, (struct sockaddr *)&THERE, sizeof(there)) == 1) die("sendto"); close(sock); puts("terminating message sent."); return 0;