Socket TCP. prima parte



Похожие документы
Socket TCP. seconda parte

Esercitazione [6] Client/Server con Socket

I Socket. Laboratorio Software M. Grotto R. Farina

INTERNET DOMAIN SOCKETS (Cap.59)

Cenni di programmazione distribuita in C++ Mauro Piccolo

Interazione (TCP) Client-Server con le socket

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/ Comunicazione Tra Processi (IPC) Parte -

Una semplice applicazione client/server 1

Esercitazione [7] Client/Server con Socket

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Opzioni del Socket. Socket Options. Opzioni di Livello Socket. Livello delle Opzioni

Esercizio 2. Client e server comunicano attraverso socket TCP

Reti (già Reti di Calcolatori )

IPC Inter Process Communication

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Creare una applicazione Winsock di base

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Interazione (TCP) Client-Server con le socket

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

Controllo Winsock di Visual Basic

rsystem Maximiliano Marchesi

I/O su Socket TCP: read()

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

L interfaccia socket

HTTP adaptation layer per generico protocollo di scambio dati

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Esempio 1: stampa locale di file remoto

Le variabili. Olga Scotti

Socket per TCP: Fondamenti

Informatica per la comunicazione" - lezione 8 -

Reti di Telecomunicazione Lezione 8

Indice. Recupero CDDB

Socket API per il Multicast

Introduzione alle applicazioni di rete

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Modulo 1.3 Reti e servizi

TECNICHE AVANZATE DI I/O. Al loro livello più basso, tutti i file scritti sull hard disk. Training per esperti SU FILE

Programmazione dei socket con TCP #2

Reti di Telecomunicazione Lezione 6

Dopo aver installato WSFTP.le, alla prima schermata quando lo apriamo vedremo questo.

InterNet: rete di reti

Guida all' uso dei sockets nella programmazione in C

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

appunti delle lezioni Architetture client/server: applicazioni client

Paradigma client-server

Il tuo manuale d'uso. SONY ERICSSON Z550I

Inter-process communication: socket

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

FTP. studioand CORTILE DEL MAGLIO. manuale per la configurazione dell accesso FTP. Via Andreis, 18/ Torino (To)

Configurazione di Microsoft Outlook 2007

12.5 UDP (User Datagram Protocol)

4 3 4 = 4 x x x 10 0 aaa

Creare un'elementare backdoor in C in ambiente UNIX

Protocolli applicativi: FTP

Lo scenario: la definizione di Internet

Dal protocollo IP ai livelli superiori

IPC System V. Code di messaggi

Транскрипт:

Socket TCP prima parte

Cosa cambia: socket int fd = socket(pf_inet, SOCK_STREAM, 0); if (fd<0) perror( socket ), exit(1); 2

Cosa cambia: bind/connect Va specificato un indirizzo TCP/IP! 3

Indirizzi TCP/IP Identificati da: 1) un indirizzo IP (intero a 32 bit, es. 143.225.5.3) 2) una porta (intero a 16 bit, da 0 a 65535) Porte: per offrire diversi servizi dallo stesso indirizzo IP da 0 a 1023: porte riservate (ai processi di root) da 5000 a 32768: porte utente altre: porte effimere (per i client, ai quali non interessa scegliere una porta specifica) 4

Esempi di porte riservate 21 ftp (trasferimento file) 22 ssh (login remoto sicuro) 25 smtp (invio email) 79 finger (informazioni sugli utenti) 80 http (web) 143 imap (lettura email) Lista ufficiale su: http://www.iana.org/ 5

Indirizzi TCP/IP in netinet/ip.h: struct sockaddr_in { sa_family_t sin_family; u_int16_t sin_port; struct in_addr sin_addr; }; struct in_addr { u_int32_t s_addr; }; vedere: man 7 ip AF_INET porta, in network order indirizzo IP, in network order 6

Ordine dei byte Come viene memorizzato un intero in memoria? sono usati 4 bytes consideriamo 65537, cioè 2 16 + 1, all'indirizzo 100 codifica Big Endian (prima il byte più significativo): 00000000 00000000 10000000 00000001 100 101 102 103 codifica Little Endian (prima il byte meno significativo): 00000001 10000000 00000000 00000000 100 101 102 103 7

Ordine dei byte i processori possono essere di uno dei due tipi ad es., i processori x86 sono little endian i protocolli TCP/IP lavorano con big endian sono necessarie funzioni di conversione conversioni tra unsigned: #include <netinet/in.h> uint32_t htonl(uint32_t x) uint16_t htons(uint16_t x) h n l s = Host = Network (big endian) = Long (4 bytes) = Short (2 bytes) uint32_t ntohl(uint32_t x) uint16_t ntohs(uint16_t x) 8

Specificare indirizzi IP Usando la notazione dotted (puntata) struct sockaddr_in indirizzo; if (inet_aton( 143.225.5.3, &indirizzo.sin_addr) == 0) perror( inet_aton ), exit(1); inet_aton (ascii to network) riempie direttamente una struttura in_addr restituisce 0 in caso di errore! 9

Indirizzi TCP/IP per il server (bind) Il server chiama bind per stabilire su quale indirizzo mettersi in ascolto Di solito, il server sceglie solo la porta Come indirizzo IP, sceglie INADDR_ANY, così accetta connessioni dirette a qualunque indirizzo (uno stesso host può avere più indirizzi IP) struct sockaddr_in mio_indirizzo; mio_indirizzo.sin_family = AF_INET; mio_indirizzo.sin_port = htons(5200); mio_indirizzo.sin_addr.s_addr = htonl(inaddr_any); bind(fd, (struct sockaddr *) &mio_indirizzo, sizeof(mio_indirizzo)); 10

Indirizzi TCP/IP per il client (connect) Il client deve conoscere l'indirizzo IP e la porta del processo server struct sockaddr_in indirizzo; indirizzo.sin_family = AF_INET; indirizzo.sin_port = htons(5200); inet_aton( 143.225.5.3, &indirizzo.sin_addr); connect(fd, (struct sockaddr *) &indirizzo, sizeof(indirizzo)); 11

Schema della connessione Computer 1 127.43.18.1 indirizzo I1 indirizzo I2 Computer 2 143.225.5.3 porta 45000 socket porta 5200 socket processo client processo server socket(...) connect(i2) socket(...) bind(i2) listen(...) accept(...) 12

Cosa cambia: listen e accept Non cambia quasi niente accept adesso prende l'indirizzo di una struttura di tipo sockaddr_in, dopo un opportuno cast struct sockaddr_in indirizzo_client; socklen_t client_size = sizeof(indirizzo_client); fd2 = accept(fd1, (struct sockaddr *)&indirizzo_client, &client_size); 13

Esercizio 1 Modificare l'esercizio 1 dei socket locali, in modo che usi socket TCP Il server si mette in ascolto su una porta utente, scelta da voi arbitrariamente (sperando che ogni gruppo scelga una porta diversa) L'utente indica al client l'indirizzo IP e la porta alla quale connettersi, usando due argomenti da linea di comando (cioè:./client 143.225.178.5 5011 ) Provare a lanciare il server su Infserv64 e il client su Infserv64bio 14

Esercizio 2 Modificare l'esercizio precedente in modo che, invece di fornire solo l'ora, il server fornisca due diversi servizi: se il client invia il carattere H, il server fornisce l'ora corrente, come faceva prima se il client invia il carattere P, il server fornisce il suo pid 15

Opzioni dei socket int getsockopt(int fd, level, option, void *val, socklen_t len); int setsockopt(int fd, level, option, void *val, socklen_t *len); leggono e scrivono le opzioni di un socket le opzioni si dividono in livelli, identificati da apposite costanti livelli: livello socket SOL_SOCKET livello TCP livello IP IPPROTO_TCP IPPROTO_IP il significato di val dipende dall'opzione len è pari alla dimensione dell'oggetto puntato da val restituiscono: 0 se OK, -1 altrimenti (e impostano errno) 16

Opzione SO_REUSEADDR int getsockopt(int fd, level, option, void *val, socklen_t len); int setsockopt(int fd, level, option, void *val, socklen_t *len); opzione di livello socket permette a bind di assegnare un indirizzo ancora occupato val deve puntare ad un intero se l'intero è diverso da zero, questa opzione è attiva se l'intero puntato contiene zero, l'opzione è inattiva len è pari a sizeof(int) 17

Opzioni SO_SNDTIMEO, SO_RCVTIMEO int getsockopt(int fd, level, option, void *val, socklen_t len); int setsockopt(int fd, level, option, void *val, socklen_t *len); opzioni di livello socket impostano un timeout per le operazioni di lettura/scrittura terminato il timeout, le operazioni di lettura/scrittura vengono interrotte con valore di ritorno negativo (errore) e errno == EWOULDBLOCK 18

Opzioni SO_SNDTIMEO, SO_RCVTIMEO int getsockopt(int fd, level, option, void *val, socklen_t len); int setsockopt(int fd, level, option, void *val, socklen_t *len); val deve puntare ad una struttura timeval struct timeval { time_t tv_sec; /* seconds */ long tv_usec; /* microseconds */ } len è pari a sizeof(timeval) i timeout si annullano impostando un nuovo timeout di zero secondi e zero microsecondi 19