Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
D. Gendarmi
Socket API
API: Application
Programming Interface host host
Una socket e un
dispositivo di interfaccia tra
un processo e il sistema Controllato dal
operativo programmatore
processo dellapplicazione processo
Un processo pu sia socket socket
spedire messaggi a un
TCP/UDP TCP/UDP
altro processo che ricevere Internet
messaggi mediante la
propria socket
La comunicazione via controllato
socket usa il modello di I/O dal sistema operativo
di Unix
open-read-write-close
file descriptor = (pathname,
flag)
Scelta del tipo di servizio
TCP - orientato alla UDP - privo di
connessione connessione
Il client stabilisce la Il client costruisce il
connessione al server messaggio
Il client e il server si Il client spedisce il
scambiano messaggi messaggio al server
multipli di dimensione Il messaggio deve
arbitraria entrare in un
Il client termina la datagramma UDP
connessione (65.500 bytes)
Il server risponde
IP
Host
Sockets bound to ports Descriptor reference
Creare un Progetto con Eclipse CDT
Project name:
Deselezionare Show
project types
Selezionare Hello
World ANSI C
Project
Selezionare nella
toolchain MinGW
GCC
NB: Questo esempio presuppone che
sulla macchina sia installato
correttamente il compilatore C
MinGW
inizializzazione dellapplicazione
La struttura WSADATA contiene informazioni
sullimplementazione delle socket windows
wVersion: versione per
typedef struct WSAData { la specifica di socket
WORD wVersion; utilizzata
WORD wHighVersion;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR* lpVendorInfo;
wHighVersion: } WSADATA
versione massima
supportabile per la
specifica di socket
windows
inizializzazione dellapplicazione
Dopo aver creato un elemento di tipo WSADATA
WSADATA wsaData;
Specificare la versione di socket windows richiesta e
recuperare i dettagli dellimplementazione della socket
windows specifica
Int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
inizializzazione dellapplicazione
Int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
If (iResult != NO_ERROR)
printf(error at WSASturtup\n);
specifica il numero di
versione di winsock sul
sistema e lo costruisce
correttamente
lpWSAData :
wVersionRequested: int WSAStartup( puntatore alla
versione di socket
WORD wVersionRequested, struttura WSDATA
windows che il
LPWSADATA lpWSAData che contiene
chiamante pu usare.
); informazioni per
limplementazione
della socket
Un esempio di codice
#include <stdio.h>
#include <winsock.h>
int main() {
// Initialize Winsock
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested= MAKEWORD(2,2);
int iResult = WSAStartup(wVersionRequested, &wsaData);
if (iResult != 0) {
printf("Error at WSAStartup()\n");
printf("A usable WinSock DLL cannot be find");
return 0;
}