Socket - класс

.NET Framework 4

Реализует интерфейс сокетов Berkeley.

System.Net.Sockets.Socket
Пространство имен:  System.Net.Sockets


  Имя Описание
Открытый метод Socket(SocketInformation) Инициализирует новый экземпляр класса Socket с помощью указанного значения, возвращенного из объекта DuplicateAndClose.
Открытый метод Socket(AddressFamily, SocketType, ProtocolType) Инициализирует новый экземпляр класса Socket, используя заданное семейство адресов, тип сокета и протокол.

  Имя Описание
Открытое свойство AddressFamily Возвращает семейство адресов объекта Socket.
Открытое свойство Available Возвращает значение, указывающее количество полученных из сети и доступных для чтения данных.
Открытое свойство Blocking Возвращает или задает значение, определяющее, находится ли объект Socket в заблокированном режиме.
Открытое свойство Connected Получает значение, указывающее, подключается ли объект Socket к удаленному узлу в результате последней операции Send или Receive.
Открытое свойство DontFragment Возвращает или задает значение Boolean, указывающее, разрешает ли объект Socket выполнение фрагментации датаграмм протокола IP.
Открытое свойство EnableBroadcast Возвращает или задает значение Boolean, указывающее, может ли объект Socket производить отправку или прием широковещательных пакетов.
Открытое свойство ExclusiveAddressUse Возвращает или задает значение Boolean, указывающее, разрешает ли объект Socket привязку к порту только одного процесса.
Открытое свойство Handle Возвращает дескриптор операционной системы для объекта Socket.
Открытое свойство IsBound Получает значение, указывающее, привязан ли объект Socket к конкретному локальному порту.
Открытое свойство LingerState Возвращает или задает значение, указывающее, будет ли объект Socket задерживать закрытие сокета при попытке отправки всех отложенных данных.
Открытое свойство LocalEndPoint Возвращает локальную конечную точку.
Открытое свойство MulticastLoopback Возвращает или задает значение, указывающее, могут ли доставляться исходящие пакеты многоадресной рассылки в передающем приложении.
Открытое свойство NoDelay Возвращает или задает значение Boolean, указывающее, используется ли поток Socket в алгоритме Nagle.
Открытое свойство Статический член OSSupportsIPv4 Указывает, поддерживают ли основная операционная система и сетевые адаптеры протокол IPv4.
Открытое свойство Статический член OSSupportsIPv6 Указывает, поддерживают ли основная операционная система и сетевые адаптеры протокол IPv6.
Открытое свойство ProtocolType Возвращает тип протокола объекта Socket.
Открытое свойство ReceiveBufferSize Получает или устанавливает значение, определяющее размер приемного буфера объекта Socket.
Открытое свойство ReceiveTimeout Получает или устанавливает значение, указывающее промежуток времени, после которого для синхронного вызова Receive истечет время тайм-аута.
Открытое свойство RemoteEndPoint Возвращает удаленную конечную точку.
Открытое свойство SendBufferSize Возвращает или задает значение, определяющее размер буфера передачи объекта Socket.
Открытое свойство SendTimeout Получает или устанавливает значение, указывающее промежуток времени, после которого для синхронного вызова Send истечет время тайм-аута.
Открытое свойство SocketType Возвращает тип объекта Socket.
Открытое свойство Статический член SupportsIPv4 Устаревшее. Возвращает значение, указывающее, доступна ли на текущем узле поддержка протокола IPv4 и включена ли эта функция.
Открытое свойство Статический член SupportsIPv6 Устаревшее. Получает значение, указывающее, поддерживает ли Framework протокол IPv6 для определенных устаревших членов Dns.
Открытое свойство Ttl Возвращает или задает значение, указывающее время существования TTL (Time To Live) для IP-пакетов, отправленных объектом Socket.
Открытое свойство UseOnlyOverlappedIO Указывает, должен ли сокет использовать только режим ввода-вывода Overlapped.

  Имя Описание
Открытый метод Accept Создает новый объект Socket для заново созданного подключения.
Открытый метод AcceptAsync Начинает асинхронную операцию, чтобы принять попытку входящего подключения.
Открытый метод BeginAccept(AsyncCallback, Object) Начинает асинхронную операцию, чтобы принять попытку входящего подключения.
Открытый метод BeginAccept(Int32, AsyncCallback, Object) Начинает асинхронную операцию, чтобы принять попытку входящего подключения и получить первый блок данных, посланных клиентским приложением.
Открытый метод BeginAccept(Socket, Int32, AsyncCallback, Object) Начинает асинхронную операцию, чтобы принять попытку входящего подключения с указанного сокета и получить первый блок данных, посланных клиентским приложением.
Открытый метод BeginConnect(EndPoint, AsyncCallback, Object) Начинает выполнение асинхронного запроса для подключения к удаленному узлу.
Открытый метод BeginConnect(IPAddress, Int32, AsyncCallback, Object) Начинает выполнение асинхронного запроса для подключения к удаленному узлу. узел задается объектом IPAddress и номером порта.
Открытый метод BeginConnect( IPAddress[], Int32, AsyncCallback, Object) Начинает выполнение асинхронного запроса для подключения к удаленному узлу. узел задается массивом IPAddress и номером порта.
Открытый метод BeginConnect(String, Int32, AsyncCallback, Object) Начинает выполнение асинхронного запроса для подключения к удаленному узлу. узел задается именем узла и номером порта.
Открытый метод BeginDisconnect Начинает выполнение асинхронного запроса для отключения от удаленной конечной точки.
Открытый метод BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object) Начинает выполнение асинхронного приема данных с подключенного объекта Socket.
Открытый метод BeginReceive(IList<ArraySegment<Byte>>, SocketFlags, SocketError , AsyncCallback, Object) Начинает выполнение асинхронного приема данных с подключенного объекта Socket.
Открытый метод BeginReceive( Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) Начинает выполнение асинхронного приема данных с подключенного объекта Socket.
Открытый метод BeginReceive( Byte[], Int32, Int32, SocketFlags, SocketError , AsyncCallback, Object) Начинает выполнение асинхронного приема данных с подключенного объекта Socket.
Открытый метод BeginReceiveFrom Начинает выполнение асинхронного приема данных с указанного сетевого устройства.
Открытый метод BeginReceiveMessageFrom Начинает асинхронный прием заданного числа байтов данных в указанное место буфера данных, используя заданный объект SocketFlags, а также сохраняет конечную точку и информацию пакета.
Открытый метод BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object) Выполняет асинхронную передачу данных на подключенный объект Socket.
Открытый метод BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError , AsyncCallback, Object) Выполняет асинхронную передачу данных на подключенный объект Socket.
Открытый метод BeginSend( Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) Выполняет асинхронную передачу данных на подключенный объект Socket.
Открытый метод BeginSend( Byte[], Int32, Int32, SocketFlags, SocketError , AsyncCallback, Object) Выполняет асинхронную передачу данных на подключенный объект Socket.
Открытый метод BeginSendFile(String, AsyncCallback, Object) Отправляет файл fileName на подключенный объект Socket, используя флагUseDefaultWorkerThread.
Открытый метод BeginSendFile(String,  Byte[], Byte[], TransmitFileOptions, AsyncCallback, Object) Выполняет асинхронную передачу файла и буферов данных на подключенный объект Socket.
Открытый метод BeginSendTo Выполняет асинхронную передачу данных на указанный удаленный узел.
Открытый метод Bind Связывает объект Socket с локальной конечной точкой.
Открытый метод Статический член CancelConnectAsync Отменяет выполнение асинхронного запроса для подключения к удаленному узлу.
Открытый метод Close() Закрывает подключение Socket и освобождает все связанные ресурсы.
Открытый метод Close(Int32) Закрывает подключение Socket и освобождает все связанные ресурсы с заданным временем ожидания, чтобы разрешить отправку данных в очереди.
Открытый метод Connect(EndPoint) Создает подключение к удаленному узлу.
Открытый метод Connect(IPAddress, Int32) Создает подключение к удаленному узлу. узел задается IP-адресом и номером порта.
Открытый метод Connect(IPAddress[], Int32) Создает подключение к удаленному узлу. узел задается массивом IP-адресов и номером порта.
Открытый метод Connect(String, Int32) Создает подключение к удаленному узлу. узел задается именем узла и номером порта.
Открытый метод ConnectAsync(SocketAsyncEventArgs) Начинает выполнение асинхронного запроса для подключения к удаленному узлу.
Открытый метод Статический член ConnectAsync(SocketType, ProtocolType, SocketAsyncEventArgs) Начинает выполнение асинхронного запроса для подключения к удаленному узлу.
Открытый метод Disconnect Закрывает подключение к сокету и позволяет повторно его использовать.
Открытый метод DisconnectAsync Начинает выполнение асинхронного запроса для отключения от удаленной конечной точки.
Открытый метод Dispose() Освобождает все ресурсы, используемые текущим экземпляром класса Socket.
Защищенный метод Dispose(Boolean) Освобождает неуправляемые ресурсы, используемые объектом Socket, и по возможности — управляемые ресурсы.
Открытый метод DuplicateAndClose Дублирует ссылку сокета для конечного процесса и закрывает сокет для этого процесса.
Открытый метод EndAccept(IAsyncResult) Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом.
Открытый метод EndAccept(Byte[], IAsyncResult) Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные для передачи.
Открытый метод EndAccept(Byte[], Int32, IAsyncResult) Асинхронно принимает входящие попытки подключения и создает новый объект Socket для связи с удаленным узлом. Этот метод возвращает буфер, который содержит начальные данные и число переданных байтов.
Открытый метод EndConnect Завершает ожидающий асинхронный запрос на подключение.
Открытый метод EndDisconnect Завершает ожидающий асинхронный запрос на разъединение.
Открытый метод EndReceive(IAsyncResult) Завершает отложенное асинхронное чтение.
Открытый метод EndReceive(IAsyncResult, SocketError) Завершает отложенное асинхронное чтение.
Открытый метод EndReceiveFrom Завершает отложенное асинхронное чтение с определенной конечной точки.
Открытый метод EndReceiveMessageFrom Завершает отложенное асинхронное чтение с определенной конечной точки. Этот метод также показывает больше информации о пакете, чем метод EndReceiveFrom.
Открытый метод EndSend(IAsyncResult) Завершает отложенную операцию асинхронной передачи.
Открытый метод EndSend(IAsyncResult, SocketError) Завершает отложенную операцию асинхронной передачи.
Открытый метод EndSendFile Завершает отложенную операцию асинхронной передачи файла.
Открытый метод EndSendTo Завершает отложенную операцию асинхронной отправки в определенное местоположение.
Открытый метод Equals(Object) Определяет, равен ли заданный объект Object текущему объекту Object. (Унаследовано от Object.)
Защищенный метод Finalize Освобождает ресурсы, используемые классом Socket. (Переопределяет Object.Finalize().)
Открытый метод GetHashCode Хэш-функция для определенного типа. (Унаследовано от Object.)
Открытый метод GetSocketOption(SocketOptionLevel, SocketOptionName) Возвращает значение указанного параметра Socket, представленного в виде объекта.
Открытый метод GetSocketOption(SocketOptionLevel, SocketOptionName, Byte[]) Возвращает указанное значение параметра Socket, представленного в виде байтового массива.
Открытый метод GetSocketOption(SocketOptionLevel, SocketOptionName, Int32) Возвращает значение указанного параметра Socket в массиве.
Открытый метод GetType Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.)
Открытый метод IOControl(Int32, Byte[], Byte[]) Задает низкоуровневые операционные режимы для объекта Socket, используя цифровые коды элементов управления.
Открытый метод IOControl(IOControlCode, Byte[], Byte[]) Задает низкоуровневые операционные режимы для объекта Socket, используя перечисление IOControlCode, чтобы указать коды элементов управления.
Открытый метод Listen Устанавливает объект Socket в состояние прослушивания.
Защищенный метод MemberwiseClone Создает неполную копию текущего объекта Object. (Унаследовано от Object.)
Открытый метод Poll Определяет состояние объекта Socket.
Открытый метод Receive(IList<ArraySegment<Byte>>) Получает данные из связанного объекта Socket в список приемных буферов.
Открытый метод Receive(Byte[]) Возвращает данные из связанного объекта Socket в приемный буфер.
Открытый метод Receive(IList<ArraySegment<Byte>>, SocketFlags) Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.
Открытый метод Receive(Byte[], SocketFlags) Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.
Открытый метод Receive(IList<ArraySegment<Byte>>, SocketFlags, SocketError) Получает данные из связанного объекта Socket в список приемных буферов, используя заданный объект SocketFlags.
Открытый метод Receive(Byte[], Int32, SocketFlags) Получает указанное число байтов данных из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.
Открытый метод Receive(Byte[], Int32, Int32, SocketFlags) Получает указанное число байтов данных из связанного объекта Socket в приемный буфер с указанной позиции смещения, используя заданный объект SocketFlags.
Открытый метод Receive(Byte[], Int32, Int32, SocketFlags, SocketError) Получает данные из связанного объекта Socket в приемный буфер, используя заданный объект SocketFlags.
Открытый метод ReceiveAsync Начинает выполнение асинхронного запроса, чтобы получить данные с подключенного объектаSocket.
Открытый метод ReceiveFrom(Byte[], EndPoint) Принимает датаграмму в буфер данных и сохраняет конечную точку.
Открытый метод ReceiveFrom(Byte[], SocketFlags, EndPoint) Принимает датаграмму в буфер данных, используя заданный объект SocketFlags, и сохраняет конечную точку.
Открытый метод ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) Получает указанное число байтов во входной буфер, используя заданный объект SocketFlags, и сохраняет конечную точку.
Открытый метод ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) Получает указанное число байтов данных в указанное место буфера данных, используя заданный объект SocketFlags, и сохраняет конечную точку.
Открытый метод ReceiveFromAsync Начинает выполнение асинхронного приема данных с указанного сетевого устройства.
Открытый метод ReceiveMessageFrom Получает указанное число байтов данных в указанное место буфера данных, используя заданный объект SocketFlags, а также сохраняет конечную точку и информацию пакета.
Открытый метод ReceiveMessageFromAsync Начинает асинхронный прием заданного числа байтов данных в указанное место буфера данных, используя заданный объект SocketAsyncEventArgs.SocketFlags, а также сохраняет конечную точку и информацию пакета.
Открытый метод Статический член Select Определяет состояние одного или нескольких сокетов.
Открытый метод Send(IList<ArraySegment<Byte>>) Отправляет набор буферов в список на подключенный объект Socket.
Открытый метод Send(Byte[]) Передает данные в подключенный объект Socket.
Открытый метод Send(IList<ArraySegment<Byte>>, SocketFlags) Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.
Открытый метод Send(Byte[], SocketFlags) Передает данные в подключенный объект Socket, используя заданный объект SocketFlags.
Открытый метод Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError) Отправляет набор буферов в список на подключенный объект Socket, используя указанный объект SocketFlags.
Открытый метод Send(Byte[], Int32, SocketFlags) Посылает указанное число байтов данных на подключенный объект Socket, используя заданный объект SocketFlags.
Открытый метод Send(Byte[], Int32, Int32, SocketFlags) Посылает указанное число байтов данных на подключенный объект Socket, начиная с указанного смещения и используя заданный объект SocketFlags.
Открытый метод Send(Byte[], Int32, Int32, SocketFlags, SocketError) Посылает указанное число байтов данных на подключенный объект Socket, начиная с указанного смещения и используя заданный объект SocketFlags.
Открытый метод SendAsync Выполняет асинхронную передачу данных на подключенный объект Socket.
Открытый метод SendFile(String) Отправляет файл fileName на подключенный объект Socket, используя флаг передачиUseDefaultWorkerThread.
Открытый метод SendFile(String, Byte[], Byte[], TransmitFileOptions) Отправляет файл fileName и буферы данных на подключенный объект Socket, используя заданное значение TransmitFileOptions.
Открытый метод SendPacketsAsync Выполняет асинхронную передачу набора файла или буферов данных в памяти на подключенный объект Socket.
Открытый метод SendTo(Byte[], EndPoint) Посылает данные на указанную конечную точку.
Открытый метод SendTo(Byte[], SocketFlags, EndPoint) Передает данные на указанную конечную точку, используя заданный объект SocketFlags.
Открытый метод SendTo(Byte[], Int32, SocketFlags, EndPoint) Посылает указанное число байтов данных на указанную конечную точку, используя заданный объект SocketFlags.
Открытый метод SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) Посылает указанное число байтов данных на указанную конечную точку, начиная с заданной позиции буфера и используя указанный объект SocketFlags.
Открытый метод SendToAsync Выполняет асинхронную передачу данных на указанный удаленный узел.
Открытый метод SetIPProtectionLevel Задается стандартный уровень защиты IP для сокета.
Открытый метод SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) Устанавливает для заданного параметра Socket указанное значение Boolean.
Открытый метод SetSocketOption(SocketOptionLevel, SocketOptionName, Byte[]) Устанавливает для указанного параметра Socket заданное значение, представленное в виде байтового массива.
Открытый метод SetSocketOption(SocketOptionLevel, SocketOptionName, Int32) Устанавливает заданное целое значение для указанного параметра Socket.
Открытый метод SetSocketOption(SocketOptionLevel, SocketOptionName, Object) Устанавливает для указанного параметра Socket заданное значение, представленное в виде объекта.
Открытый метод Shutdown Блокирует передачу и получение данных для объекта Socket.
Открытый метод ToString

Возвращение строки, представляющей текущий объект. (Унаследовано от Object.)

 


Класс Socket обеспечивает широкий набор методов и свойств для сетевых взаимодействий. Класс Socket позволяет выполнять как синхронную, так и асинхронную передачу данных с использованием любого из коммуникационных протоколов, имеющихся в перечислении ProtocolType.

Класс Socket придерживается шаблона имен платформы .NET Framework для асинхронных методов. Например, синхронный метод Receive соответствует асинхронным методам BeginReceive и EndReceive.

Если приложению при его исполнении требуется только один поток, воспользуйтесь приведенными ниже методами, которые разработаны для работы в синхронном режиме.

  • Если используется протокол, ориентированный на установление соединения, такой как протокол TCP, сервер должен выполнять прослушивание подключений, используя метод Listen. Метод Accept обрабатывает любые входящие запросы на подключение и возвращает объект Socket, который может использоваться для передачи данных с удаленного узла. Используйте этот возвращенный объект Socket для вызова метода Send или Receive. Вызовите метод Bind, прежде чем производить обращение к методу Listen, если необходимо указать локальный IP-адрес или номер порта. Используйте нулевое значение для номера порта, если требуется, чтобы свободный порт был назначен основным поставщиком услуг. Если требуется произвести подключение к прослушивающему узлу, вызовите метод Connect. Для обмена данными вызовите метод Send или Receive.

  • Если используется протокол, не ориентированный на установление соединения, такой как протокол UDP, нет необходимости в отслеживании подключений. Для приема всех поступающих датаграмм вызовите метод ReceiveFrom. Для посылки датаграмм на удаленный узел воспользуйтесь методом SendTo.

Чтобы выполнить передачи с использованием отдельных потоков во время исполнения, воспользуйтесь следующими методами, предложенными для работы в асинхронном режиме.

  • Если применяется протокол, ориентированный на установление соединения, такой как протокол TCP, используйте методы SocketBeginConnect и EndConnect для подключения к прослушивающему узлу. Для асинхронного обмена данными воспользуйтесь методами BeginSend и EndSend или методами BeginReceive и EndReceive. Входящие запросы на подключение могут быть обработаны с помощью методов BeginAccept и EndAccept.

  • Если используется протокол без установления соединения, такой как протокол UDP, можно воспользоваться для посылки датаграмм методами BeginSendTo и EndSendTo, а для получения датаграмм можно применить методы BeginReceiveFrom и EndReceiveFrom.

Если на сокете выполняется несколько асинхронных операций, они не обязательно должны завершаться в том же порядке, в котором эти операции запускаются.

Когда прием и отправка данных завершены, используйте метод Shutdown для того, чтобы отключить объект Socket. После вызова метода Shutdown обратитесь к методу Close, чтобы освободить все связанные с объектом Socket ресурсы.

Класс Socket позволяет выполнить настройку объекта Socket с использованием метода SetSocketOption. Извлеките эти параметры, используя метод GetSocketOption.

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);
    }
}

Источник: http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.aspx Причина: Заметка для начинающего. :)

Last edited May 3, 2011 at 12:33 PM by Maicksoft, version 1

Comments

No comments yet.