0% ont trouvé ce document utile (0 vote)
87 vues28 pages

Socket

Transféré par

salaheddinezitouni89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
87 vues28 pages

Socket

Transféré par

salaheddinezitouni89
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Organisation

■ CM
Plan
Modèles en couches : OSI & TCP/IP
Couche internet (IP, ICMP, ARP/RARP)
Couche transport (TCP, UDP)
Couche application (HTTP, DNS, SMTP, FTP...)
Programmation Réseaux
Programmation Réseau
Applications Client/serveur
Mode connecté/mode non connecté
Programmation en C
Programmation en java
Modèle client-serveur définition

Application client/serveur
◼ application qui fait appel à des services distants à travers d’un
échange de messages (les requêtes) plutôt que par un partage de
données (mémoire ou fichiers)
◼ Serveur
• programme offrant un service sur un réseau (par extension,
machine offrant un service)
◼ Client
• programme qui émet des requêtes (ou demandes de service). Il
est toujours l’initiateur du dialogue
Exemple de client/serveur
■ Un serveur de fichiers
■ Des clients qui demandent des fichiers
■ Comment gérer la concurrence ?
◆ un processus serveur => un client servi
◆ plusieurs clients => il va falloir faire des fork() !!!
■ Quel protocole utiliser ?
◆ le client envoie le nom du fichier
◆ le serveur renvoie la taille puis les données
◆ comment gère-t-on les erreurs ?
Mode connecté/nom connecté
■ Mode connecté (TCP) :

◆ problèmes de communications gérés automatiquement,

◆ primitives simples d’émission et de réception,

◆ gestion de la connexion coûteuse,

◆ pas de délimitation des messages dans le tampon.

■ Mode non connecté (UDP) :

◆ consomme moins de ressources systèmes,

◆ permet la diffusion,

◆ gestion
de toutes les erreurs à la main : il faut réécrire la couche
transport !!!
Programmation Réseau
Applications Client/serveur
Mode connecté/mode non connecté

Programmation en C
Programmation en java
Les sockets
■ Interface d’accès au réseau
■ développé dans Unix BSD (Berkeley Software Distribution)
■ n° port, @ IP, protocole (TCP, UDP, ...)

Couches Session à Application

Client Serveur
n° port :2345 Couche Transport (TCP, UDP) n° port :80
@ IP : [Link] @ IP : [Link]

Couche Réseau (IP)


@ IP : [Link] @ IP : [Link]

Couche Liaison
@ Ethernet @ Ethernet
L'API socket
■ Création de socket : socket(family, type, protocol)
■ Ouverture de dialogue :
◆ client : connect(...)
◆ serveur : bind(..), listen(...), accept(...)
■ Transfert de données :
◆ mode connecté : read(...), write(...), send(...), recv(...)
◆ mode non connecté : sendto(...), recvfrom(...),
sendmsg(...), recvmsg(...)
■ Clôture du dialogue :
◆ close(...), shutdown(...)
Client/Serveur
en mode non connecté

Client Serveur

socket() Création de la socket socket()

bind() Assignation n°port - @ IP bind()

sendto() envoi requête recvfrom()


bloqué jusqu'à la réception de la requête

recvfrom() traitement de la requête


bloqué jusqu'à la réception de la réponse
envoi réponse sendto()

traitement de la réponse

close() Fermeture de la socket close()


Client/Serveur
en mode connecté

Client Serveur
socket() Création de la socket socket()

bind()

listen()

accept()
établissement de la connexion
connect()

write() envoi requête read()


bloqué jusqu'à la réception de la requête

read() traitement de la requête


bloqué jusqu'à la réception de la réponse
envoi réponse write()

traitement de la réponse

close() Fermeture de la socket close()


La primitive socket()
int socket(int family, int type, int protocol)
■ family :
◆ AF_INET : pour des communications Internet
◆ AF_UNIX : pour des communications locales
■ type ou mode de fonctionnement :
◆ SOCK_STREAM : mode connecté (TCP)
◆ SOCK_DGRAM : mode déconnecté (UDP)
◆ SOCK_RAW : accès direct aux couches basses (IP)
■ protocol :
◆ IPPROTO_UDP (protocole UDP avec SOCK_DGRAM)
◆ IPPROTO_TCP (protocole TCP avec SOCK_STREAM)
◆ IPPROTO_ICMP (protocole ICMP avec SOCK_RAW)
◆ IPPROTO_RAW (accès direct IP avec SOCK_RAW)
La primitive connect()
int connect(int sock_desc, struct sockaddr * @_serveur, int lg_@)
■ sock_desc : descripteur de socket retourné par socket()
■ @_serveur : adresse IP et n° de port du serveur distant
■ Exemple de client :
int sd;
struct sockaddr_in serveur; // @IP, n° port, mode
struct hostent remote_host; // nom et @IP

sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


serveur.sin_family = AF_INET;
serveur.sin_port = htons(13);
remote_host = gethostbyname(“[Link]”);
bcopy(remote_host->h_addr, (char *)&serveur.sin_addr,
remote_host->hlength); // Recopie de l’adresse
connect(sd, (struct sockaddr *)&serveur, sizeof(serveur));
La primitive bind()
int bind(int sock_desc, struct sockaddr *my_@, int lg_@)
■ sock_desc : descripteur de socket retourné par socket()
■ my_@ : adresse IP et n° de port auxquels le serveur veut répondre
■ Exemple de serveur :

int sd;
struct sockaddr_in serveur; // @IP, n° port, mode

sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


serveur.sin_family = AF_INET;
serveur.sin_port = 0; // Laisse le système choisir un port
serveur.sin_addr.s_addr = INADDR_ANY;
// Autorise des connexions de n’importe où
bind(sd, (struct sockaddr *)&serveur, sizeof(serveur));
La primitive listen()
int listen(int sock_desc, int backlog)
■ sock_desc : descripteur de socket retourné par socket()
■ backlog : nombre maximum de connexions en attente d’être acceptées
■ Exemple de serveur :

int sd;
struct sockaddr_in serveur; // @IP, n° port, mode

sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


serveur.sin_family = AF_INET;
serveur.sin_port = 0; // Laisse le système choisir un port
serveur.sin_addr.s_addr = INADDR_ANY;
// Autorise des connexions de n’importe où
bind(sd, (struct sockaddr *)&serveur, sizeof(serveur));
listen(sd, 5);
La primitive accept()
int accept(int sock_desc, struct sockaddr *client, int lg_@)
■ sock_desc : descripteur de socket retourné par socket()
■ client : identité du client demandant la connexion
■ accept renvoie le descripteur de la nouvelle socket créée

Client Serveur
sc = socket() Création de la socket ss =socket()

bind(ss)

listen(ss)

sa = accept(ss)
établissement de la connexion
connect(sc)

write(sc) envoi requête read(sa)


bloqué jusqu'à la réception de la requête

read(sc) traitement de la requête


bloqué jusqu'à la réception de la réponse
envoi réponse write(sa)

traitement de la réponse

close(sc) Fermeture de la socket close(sa)


■ int
Les primitives d'envoi/réception
write(int sock_desc, char *tampon, int lg_tampon);
■int read(int sock_desc, char *tampon, int lg_tampon);
■int send(int sock_desc, char *tampon, int lg_tampon, int drap);
■int recv(int sock_desc, char *tampon, int lg_tampon, int drap);
■ int sendto(int sock_desc, char *tampon, int lg_tampon, int drap,
struct sockaddr *to, int lg_to);
■ int recvfrom(int sock_desc, char *tampon, int lg_tampon, int drap,
struct sockaddr *from, int lg_from);

■ drap : options de contrôle de la transmission (consulter le man)


Programmation Réseau
Applications Client/serveur
Mode connecté/mode non connecté

Programmation en C
Programmation en java
C anau x bidirec tion ne ls
◼ C o m m u n ic atio n en tre d eu x ap p lic atio n s
d istan te s p ar d es c an au x d e b id irec tio n n e ls
(so c k ets ).
◼ d eu x typ e s d e so c kets en J a va:
 S tream s ockets (TC P) : com m u n ication en m o d e
con n ecté, car actéris é es p ar le c aractèr e con tin u du
flu x de d on n é es ( ordr e correct - d on n é es n on
corrom pu es).
 D atagr am sock ets (U D P) : com m u n ication en m o d e
n on -con n ecté : plu s gran d e ra pidité, m a is fiabilité
m oin dr e (p erte, du p lic ation ou d és or dre p ossibles).
Classes de [Link]
: base pour gérer contenus MIME
◼ ContentHandler
◼ DatagramPacket UDP

◼ DatagramSocket : gestion des adresses

◼ InetAddress TCP
◼ ServerSocket
◼ Socket
◼ SocketImpl URL

◼ URL
◼ URLConnection
◼ URLEncoder
InetAdress
public final class InetAddress {

public String getHostName(


)
public byte[] getAddress()s()
public String getHostAddre
s t obj)
public int hashCode()
public boolean equals(Obj InetAddress
ec
getByName(String host) throws UnknownHostException
public String toString()
public static
public static synchronized
synchronizedInetAddress
getAllByName(String host)[] throwsUnknownHostException
public static InetAddress
getLocalHost() throws UnknownHostException
}
ServerSocket
public final class ServerSocket {
public ServerSocket(int port)
throws IOException
public ServerSocket(int port, int backlog)
throws IOException
public InetAddress getInetAddress()
public int getLocalPort()
public Socket accept()
throws IOException
public void close()
throws IOException
public String toString()
public static synchronized void
setSocketFactory(SocketImplFactory fac)
throws IOException
}
Socket
publ ic final class Soc ket {
pu blic Sock et (S tr i ng ho st, int port)
th row s Unk now nHo st E xc ept ion , IO Exc e ption
pu blic Sock et (S tr i ng ho st, int port, boolean stre am )
th rows IOEx cepti on
pu blic Sock et (Ine tA dd ress address , int po rt)
th rows IOEx cepti on
pu blic Sock et (Ine tA dd ress address , int po rt, bool ean st ream )
th rows IOEx cepti on
public InetAddress getInetAdd ress ()
p u b l i c int getPort ()
p u b l i c int ge tLo c alPort ()
p u b l i c InputStream getInputSt ream () throw s IOException
p u b l i c Outp utStr e am ge tO utputStrea m ( ) thr ows IOEx cep tion
p u b l i c synchroniz ed vo id cl o se() thr o ws IOException
public String toSt ring()
pu blic static sync hronized void
se tS ocketIm plFac tor y(Soc ketIm plFact ory fa c)
th ro ws IOException
}
Utilisation des sockets TCP / IP
Client Serveur

1- Création d'un client et tentative de 1 Enregistrement du service Construction


connexion d'un objet de type ServerSocket (paramètres
Construction d'un objet de type Socket : n° de port et nombre connexions)
(paramètres : hôte et n° de port) 2 Attente d'une demande de connexion du
client
accept() retourne, lorsqu'une connexion est
acceptée, un objet de type Socket

2 Echange 3 Echange
OutputStream InputStream
InputStream OutputStream
3 Fermeture (close()) 4 Fermeture (close())
Exemple de code : Serveur (1)
import [Link].*;
import [Link].*;

public class Serveur {


ServerSocket srvk;
public Serveur (int port) throws IOException {
srvk = new ServerSocket (port);
}
public void go (){
while (true){
try {
Socket sck = [Link] ();
OutputStream os = [Link]();
ObjectOutputStream oos = new ObjectOutputStream(os);
String msg = "REPONSE DE SERVEUR";
Object obj = (Object) msg;
[Link](obj);
[Link] ();
}
catch (IOException e) {}
}
}
Exemple de code : Serveur (2)
public static void main (String args [])
throws IOException {
Serveur s = new Serveur ([Link] (args[0]));
[Link] ();
}
}
Exemple de code : Client (1)
import [Link].*;
import [Link].*;

public class Client {


Socket so;
public Client (String host, int port) throws IOException {
so = new Socket (host, port);
}

public void go () {
try {
InputStream is = [Link] ();
ObjectInputStream ois = new ObjectInputStream (is);
Object obj = [Link]();
String msg = (String) obj;
[Link](msg);
}catch (IOException e) {}
catch (ClassNotFoundException e){}
}

public void stop (){


try { [Link] ();}
catch (IOException e) { }
}
Exemple de code : Client (2)

public static void main (String args [])


throws IOException {
Client c = new Client (args[0], [Link] (args[1]));
[Link] ();
[Link] ();
}
}
• TP programmation réseau ([Link])

Vous aimerez peut-être aussi