Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Socket, classe

Socket, classe

Implémente l'interface de sockets Berkeley.

Espace de noms : System.Net.Sockets
Assembly : System (dans system.dll)

public class Socket : IDisposable
public class Socket implements IDisposable
public class Socket implements IDisposable

La classe Socket fournit une grande variété de méthodes et de propriétés pour les communications réseau. La classe Socket vous permet d'effectuer des transferts de données synchrones et asynchrones à l'aide de n'importe quel protocole de communication répertorié dans l'énumération ProtocolType. La classe Socket suit le modèle d'affectation de noms du .NET Framework pour les méthodes asynchrones ; par exemple, la méthode synchrone Receive correspond aux méthodes asynchrones BeginReceive et EndReceive.

Si votre application nécessite un seul thread au cours de l'exécution, utilisez les méthodes suivantes, conçues pour le mode de fonctionnement synchrone.

  • Si vous utilisez un protocole orienté connexion tel que TCP, votre serveur peut écouter les connexions à l'aide de la méthode Listen. La méthode Accept traite toutes les demandes de connexion entrantes et retourne un Socket que vous pouvez utiliser pour la communication de données avec l'hôte distant. Utilisez ce Socket retourné pour appeler la méthode Send ou Receive. Appelez la méthode Bind avant d'appeler la méthode Listen si vous voulez spécifier l'adresse IP locale et le numéro de port. Utilisez le numéro de port zéro si vous souhaitez que le fournisseur de services sous-jacent vous assigne un port libre. Si vous voulez vous connecter à un hôte à l'écoute, appelez la méthode Connect. Pour communiquer des données, appelez la méthode Send ou Receive.

  • Si vous utilisez un protocole sans connexion, tel que UDP, vous n'avez pas du tout besoin d'écouter les connexions. Appelez la méthode ReceiveFrom pour accepter tous les datagrammes entrants. Utilisez la méthode SendTo pour envoyer des datagrammes à un hôte distant.

Pour traiter les communications à l'aide de threads séparés au cours de l'exécution, utilisez les méthodes suivantes, conçues pour le mode de fonctionnement asynchrone.

  • Si vous utilisez un protocole orienté connexion tel que TCP, utilisez Socket, la méthode BeginConnect et la méthode EndConnect pour vous connecter à un hôte à l'écoute. Utilisez les méthodes BeginSend et EndSend ou BeginReceive et EndReceive pour communiquer des données de manière asynchrone. Les demandes de connexion entrantes peuvent être traitées à l'aide des méthodes BeginAccept et EndAccept.

  • Si vous utilisez un protocole sans connexion tel que UDP, vous pouvez utiliser les méthodes BeginSendTo et EndSendTo pour envoyer des datagrammes, ainsi que les méthodes BeginReceiveFrom et EndReceiveFrom pour recevoir des datagrammes.

Si vous exécutez plusieurs opérations asynchrones sur un socket, elles ne se terminent pas nécessairement dans l'ordre dans lequel elles sont exécutées.

Lorsque vous avez terminé d'envoyer et de recevoir des données, utilisez la méthode Shutdown pour désactiver Socket. Après avoir appelé la méthode Shutdown, appelez la méthode Close pour libérer toutes les ressources associées à Socket.

La classe Socket vous permet de configurer Socket à l'aide de la méthode SetSocketOption. Récupérez ces paramètres à l'aide de la méthode GetSocketOption.

RemarqueRemarque

Si vous écrivez une application relativement simple et si vous n'avez pas besoin des performances maximales, préférez l'utilisation de TcpClient, TcpListener et UdpClient. Ces classes fournissent une interface plus simple et plus conviviale pour les communications de Socket.

Remarque sur la plate-forme Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows CE : Toutes les options de socket ne sont pas prises en charge sur tous les systèmes d'exploitation de périphérique.

L'exemple de code suivant montre comment la classe Socket peut être utilisée pour envoyer des données à un serveur HTTP et recevoir la réponse de celui-ci. Cet exemple entraîne un blocage jusqu'à la réception de la totalité de la page.

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

public class GetSocket
{
    private static Socket ConnectSocket(string server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;
        
        // Get host related information.
        hostEntry = Dns.GetHostEntry(server);

        // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
        // an exception that occurs when the host IP Address is not compatible with the address family
        // (typical in the IPv6 case).
        foreach(IPAddress address in hostEntry.AddressList)
        {
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = 
                new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            tempSocket.Connect(ipe);

            if(tempSocket.Connected)
            {
                s = tempSocket;
                break;
            }
            else
            {
                continue;
            }
        }
        return s;
    }

    // This method requests the home page content for the specified server.
    private static string SocketSendReceive(string server, int port) 
    {
        string request = "GET / HTTP/1.1\r\nHost: " + server + 
            "\r\nConnection: Close\r\n\r\n";
        Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
        Byte[] bytesReceived = new Byte[256];
       
        // Create a socket connection with the specified server and port.
        Socket s = ConnectSocket(server, port);

        if (s == null)
            return ("Connection failed");
      
        // Send request to the server.
        s.Send(bytesSent, bytesSent.Length, 0);  
        
        // Receive the server home page content.
        int bytes = 0;
        string page = "Default HTML page on " + server + ":\r\n";

        // The following will block until te page is transmitted.
        do {
            bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
            page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
        }
        while (bytes > 0);
        
        return page;
    }
    
    public static void Main(string[] args) 
    {
        string host;
        int port = 80;

        if (args.Length == 0)
            // If no server name is passed as argument to this program, 
            // use the current host name as the default.
            host = Dns.GetHostName();
        else
            host = args[0];

        string result = SocketSendReceive(host, port); 
        Console.WriteLine(result);
    }
}


import System.*;
import System.Text.*;
import System.IO.*;
import System.Net.*;
import System.Net.Sockets.*;

public class GetSocket
{
    private static Socket ConnectSocket(String server, int port)
    {
        Socket s = null;
        IPHostEntry hostEntry = null;

        // Get host related information.
        hostEntry = Dns.Resolve(server);

        // Loop through the AddressList to obtain the supported AddressFamily. 
        // This is to avoid an exception that occurs when the host IP Address 
        // is not compatible with the address family
        // (typical in the IPv6 case).
        for (int iCtr = 0; iCtr < hostEntry.get_AddressList().length; iCtr++) {
            IPAddress address = hostEntry.get_AddressList()[iCtr];
            IPEndPoint ipe = new IPEndPoint(address, port);
            Socket tempSocket = new Socket(ipe.get_AddressFamily(),
                SocketType.Stream, ProtocolType.Tcp);
            tempSocket.Connect(ipe);
            if (tempSocket.get_Connected()) {
                s = tempSocket;
                break;
            }
            else {
                continue;
            }
        }

        return s;
    } //ConnectSocket

    // This method requests the home page content for the specified server.
    private static String SocketSendReceive(String server, int port)
    {
        String request = "GET / HTTP/1.1\r\nHost: " + server 
            + "\r\nConnection: Close\r\n\r\n";
        System.Byte bytesSent[] = 
            (System.Byte[])Encoding.get_ASCII().GetBytes(request);
        System.Byte bytesReceived[] = new System.Byte[256];

        // Create a socket connection with the specified server and port.
        Socket s = ConnectSocket(server, port);
        if (s == null) {
            return "Connection failed";
        }

        // Send request to the server.
        s.Send((ubyte[])bytesSent, bytesSent.length, (SocketFlags)0);

        // Receive the server home page content.
        int bytes = 0;
        String page = "Default HTML page on " + server + ":\r\n";

        // The following will block until te page is transmitted.
        do {
            bytes = s.Receive((ubyte[])bytesReceived,
                bytesReceived.length, (SocketFlags)0);
            page = page + Encoding.get_ASCII().GetString(
                (ubyte[])bytesReceived, 0, bytes);
        } while (bytes > 0);
        return page;
    } //SocketSendReceive

    public static void main(String[] args)
    {
        String host;
        int port = 80;
        if (args.length == 0) {
            // If no server name is passed as argument to this program, 
            // use the current host name as the default.
            host = Dns.GetHostName();
        }
        else {
            host = args[0];
        }
        String result = SocketSendReceive(host, port);
        Console.WriteLine(result);
    } //main
} //GetSocket

  • SocketPermission  Établir une connexion sortante ou accepter une demande entrante.

System.Object
  System.Net.Sockets.Socket

Les instances de cette classe sont thread-safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft