Section courante

A propos

Section administrative du site

ACCEPT

Accepte
Free Pascal Sockets

Syntaxe

Function Accept(Sock:LongInt;Var addr:TInetSockAddr;Var SockIn:file;Var SockOut:file):Boolean;
Function Accept(Sock:LongInt;Var addr:TInetSockAddr;Var SockIn:text;Var SockOut:text):Boolean;
Function Accept(Sock:LongInt;Var addr:String;Var SockIn:Text;Var SockOut:Text):Boolean;
Function Accept(Sock:LongInt;Var addr:String;Var SockIn:file;Var SockOut:file):Boolean;

Paramètres

Nom Description
Sock Ce paramètre permet d'indiquer une représentation de socket d'écoute, ayant été créé et configuré pour accepter les connexions. C'est le descripteur du socket serveur sur lequel Accept va écouter et accepter les connexions entrantes.
addr Ce paramètre permet d'indiquer les informations sur l'adresse du client qui se connecte, telles que son adresse IP et son numéro de port. Lorsqu'une connexion est acceptée, addr sera rempli avec ces informations.
SockIn Ce paramètre permet d'indiquer une représentation d'un flux d'entrée étant utilisé pour lire les données envoyées par le client après que la connexion ait été acceptée.
SockOut Ce paramètre permet d'indiquer une représentation d'un flux de sortie où les données peuvent être envoyées au client.

Description

Cette fonction permet d'accepter une connexion depuis un socket.

Remarques

Erreurs

En cas d'erreur, -1 est renvoyé et les erreurs sont signalées dans SocketError et incluent les éléments suivants :

Constante Description
ESockEBADF Le descripteur de socket n'est pas valide.
ESockENOTSOCK Le descripteur n'est pas un socket.
SYS_EOPNOTSUPP Le type de socket ne prend pas en charge l'opération d'écoute.
ESockEFAULT L'adresse pointe en dehors de votre espace d'adressage.
ESockEWOULDBLOCK L'opération demandée bloquerait le processus.

Exemple

Voici un exemple en Free Pascal de l'utilisation de la fonction Accept de l'unité Sockets, permettant de gérer les connexions réseau avec un serveur en utilisant des sockets :

  1. Program SocketAcceptExample;
  2.  
  3. {$mode objfpc}
  4. {$H+}
  5.  
  6. Uses
  7.  SysUtils, Sockets;
  8.  
  9. Var
  10.  ListenSock, ClientSock: LongInt;
  11.  Addr: TInetSockAddr;
  12.  SockIn, SockOut: File;
  13.  ClientAddr: TInetSockAddr;
  14.  Buffer: Array[0..255] of Char;
  15.  BytesRead: LongInt;
  16.  
  17. BEGIN
  18.   { Créer un socket serveur }
  19.  ListenSock := fpSocket(AF_INET, SOCK_STREAM, 0);
  20.  If ListenSock = -1 Then Begin
  21.   WriteLn('Erreur de création de socket.');
  22.   Exit;
  23.  End;
  24.  
  25.   { Configurer l'adresse du serveur }
  26.  Addr.sin_family := AF_INET;
  27.  Addr.sin_port := htons(8080);  { Port d'écoute }
  28.  Addr.sin_addr.s_addr := INADDR_ANY;
  29.  
  30.   { Lier le socket à l'adresse et au port }
  31.  If fpBind(ListenSock, @Addr, SizeOf(Addr)) = -1 Then Begin
  32.   WriteLn('Erreur de binding.');
  33.   CloseSocket(ListenSock);
  34.   Exit;
  35.  End;
  36.  
  37.   { Écouter les connexions entrantes }
  38.  If fpListen(ListenSock, 5) = -1 Then Begin
  39.   WriteLn('Erreur de mise en écoute.');
  40.   CloseSocket(ListenSock);
  41.   Exit;
  42.  End;
  43.  
  44.  WriteLn('Serveur en écoute sur le port 8080...');
  45.  
  46.   { Accepter une connexion entrante }
  47.  If Not Accept(ListenSock, ClientAddr, SockIn, SockOut) Then Begin
  48.   WriteLn('Erreur d''acceptation de connexion.');
  49.   CloseSocket(ListenSock);
  50.   Exit;
  51.  End;
  52.  
  53.  WriteLn('Connexion acceptée.');
  54.  
  55.   { Préparer les fichiers de réception et d'envoi }
  56.  Assign(SockIn, '');  { Pas besoin de spécifier de fichier ici, on va utiliser le socket directement }
  57.  Assign(SockOut, '');
  58.  FileMode := fmOpenReadWrite;  { Ouvrir les fichiers en mode lecture/écriture }
  59.  Reset(SockIn);  { Initialiser le fichier SockIn }
  60.  Reset(SockOut); { Initialiser le fichier SockOut }
  61.  
  62.   { Lire un message depuis le client }
  63.  BytesRead := fpRecv(ClientSock, @Buffer, SizeOf(Buffer) - 1, 0);
  64.  If BytesRead > 0 Then Begin
  65.   Buffer[BytesRead] := #0; { Terminer la chaîne }
  66.   WriteLn('Message du client: ', Buffer);
  67.  End;
  68.  
  69.   { Répondre au client }
  70.  WriteLn(ClientSock, 'Réponse du serveur: Message reçu.');
  71.  
  72.   { Fermer les sockets }
  73.  CloseSocket(ClientSock);
  74.  CloseSocket(ListenSock);
  75. END.

Voir également

FPListen - Écoutez les connexions sur une prise.
Connect - Ouvrir une connexion à un socket serveur (obsolète).
FPConnect - Ouvrir une connexion à un socket serveur.
FPBind - Lier un socket à une adresse.



Dernière mise à jour : Lundi, le 24 Août 2020