• Non ci sono risultati.

Daniele Contarino Socket

N/A
N/A
Protected

Academic year: 2021

Condividi "Daniele Contarino Socket"

Copied!
12
0
0

Testo completo

(1)

Socket

Daniele Contarino

Sistemi Operativi e Reti

Percorso Abilitante Speciale A.A. 2013/14

(2)

La parola Socket, se tradotta in italiano significa Presa.

L’idea non è tanto diversa rispetto alle socket

elettriche: scambiare elettricità (dati) tra due o più entità diverse che hanno tecnologie differenti, ma con un protocollo comune.

Socket

(3)

S.O. e Reti - Socket 3 di 11 Daniele Contarino

 Forniscono una interfaccia di collegamento di rete (API) a livello Trasporto e sono fornite dal Sistema Operativo

 Sono il punto di collegamento finale (endpoint) bidirezionale tra due processi in esecuzione

(anche remoti)

 La gestione delle socket a livello applicativo è simile alla gestione dell’I/O (es. i file)

 Le socket possono essere connectionless o connection-oriented

Socket

(4)

Socket in real world

Interfacce di rete Interfacce di rete OS (Linux)

Applicativo

(server)

OS (Windows) Applicativo

(client)

Rete fisica TCP/IP Socket

WinSocket Unix Socket

Ethernet Wireless

(5)

S.O. e Reti - Socket 5 di 11 Daniele Contarino

Client

Esercitazione di laboratorio

int main(int argc, char *argv[]){

int nByte, port = 80, pSocket;

char buffer[256];

char* address = "mioserver.it";

struct sockaddr_in serverAddress;

pSocket = socket(AF_INET, SOCK_STREAM, 0);

if (pSocket < 0){

printf("Errore durante la creazione della Socket. Il processo verra chiuso");

return 1;

}

serverAddress.sin_family = AF_INET;

serverAddress.sin_port = htons(port);

memcpy(&(serverAddress.sin_addr),

gethostbyname(address)->h_addr, sizeof(serverAddress.sin_addr));

(6)

Client

Esercitazione di laboratorio

if (connect(pSocket, (struct sockaddr *) &

serverAddress, sizeof(serverAddress)) < 0){

printf("Errore durante la connessione al server.

Il processo verra chiuso");

return 2;

}

nByte = write(pSocket, "Ciao Server! :P", 12);

if (nByte < 0) {

printf("Errore durante la scrittura sulla socket. Il processo verra chiuso");

return 3;

}

memset(buffer, 0, 256);

nByte = recv(pSocket, buffer, 255, 0);

if (nByte < 0){

printf("Errore durante la lettura della risposta del server. Il processo verra’ chiuso");

return 4; }

(7)

S.O. e Reti - Socket 7 di 11 Daniele Contarino

Client

Esercitazione di laboratorio

printf("Messaggio ricevuto: %s\n", buffer);

close(pSocketClient);

close(pSocket);

return 0;

}

(8)

Server

Esercitazione di laboratorio

int main(int argc, char *argv[]){

int nByte, port = 80, pSocket, pSocketClient;

char buffer[256];

struct sockaddr_in clients, clientIncoming;

pSocket = socket(AF_INET, SOCK_STREAM, 0);

if (pSocket < 0){

printf("Errore durante la creazione della Socket.

Il processo verra chiuso");

return 1;

}

clients.sin_family = AF_INET;

clients.sin_addr.s_addr = INADDR_ANY;

clients.sin_port = htons(port);

if (bind(pSocket, (struct sockaddr *) &clients, sizeof(clients)) < 0){

printf("Errore durante la connessione della Socket.

Il processo verra chiuso");

return 2; }

(9)

S.O. e Reti - Socket 9 di 11 Daniele Contarino

Server

Esercitazione di laboratorio

listen(pSocket, 5);

pSocketClient = accept(pSocket, (struct sockaddr *)

&clientIncoming, sizeof(clientIncoming));

if (pSocketClient < 0) {

printf("Errore durante la connessione del client. Il processo verra chiuso");

return 3;

}

bzero(buffer, 256);

nByte = read(pSocketClient, buffer, 255);

if (nByte < 0){

printf("Errore durante la lettura dei dati dal client. Il processo verra chiuso");

return 4;

}

printf("Messaggio ricevuto: %s\n", buffer);

(10)

Server

Esercitazione di laboratorio

nByte = write(pSocketClient, "Ciao Client! :D", 29);

if (nByte < 0){

printf("Errore durante l'invio dei dati al client.

Il processo verra chiuso");

return 5;

}

close(pSocketClient);

close(pSocket);

return 0;

}

(11)

S.O. e Reti - Socket

(12)

Socket

Daniele Contarino

Sistemi Operativi e Reti

Percorso Abilitante Speciale A.A. 2013/14

Riferimenti

Documenti correlati

 l’astrazione di comunicazione interprocesso fornita dai socket consiste nella possibilità di inviare un messaggio tramite un socket di un processo e ricevere il messaggio tramite

Differential inequalities, nonexistence results, Serrin exponent, elliptic systems, critical growth,

■ Il client effettua la richiesta di una connessione ad un server per un servizio collegato ad una determinata porta. ■ Se la richiesta è accettata la connessione tra i due

Il tipo di comunicazione specifica come deve avvenire la comunicazione, ovvero se si debbano usare i datagram o se si vuole una connessione di qualità, o ancora se si

Esempio indirizzi : Vediamo alcuni esempi di

Nel caso del client l'altra parte del  socket pair e' assegnata automaticamente dal kernel, i valori

Esercizio integers : scrivere un programma server, e relativo client, che sia in grado di

● CPU pipelined: Facendo in modo che i tre passi che compongono l'operazione utilizzino parti diffenti