Socket.BeginConnect Method

Definition

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection.

Overloads

BeginConnect(EndPoint, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection.

BeginConnect(IPAddress, Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается объектом IPAddress и номером порта.The host is specified by an IPAddress and a port number.

BeginConnect(IPAddress[], Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается массивом IPAddress и номером порта.The host is specified by an IPAddress array and a port number.

BeginConnect(String, Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается именем узла и номером порта.The host is specified by a host name and a port number.

BeginConnect(EndPoint, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection.

public:
 IAsyncResult ^ BeginConnect(System::Net::EndPoint ^ remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public:
 IAsyncResult ^ BeginConnect(System::Net::EndPoint ^ end_point, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginConnect (System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
public IAsyncResult BeginConnect (System.Net.EndPoint end_point, AsyncCallback callback, object state);
member this.BeginConnect : System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
member this.BeginConnect : System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginConnect (remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginConnect (end_point As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

remoteEPend_point
EndPoint

Объект EndPoint, представляющий удаленный узел.An EndPoint that represents the remote host.

callback
AsyncCallback

Делегат AsyncCallback.The AsyncCallback delegate.

state
Object

object, содержащий сведения о состоянии для этого запроса.An object that contains state information for this request.

Returns

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное подключение.An IAsyncResult that references the asynchronous connection.

Exceptions

Параметр remoteEP равен null.remoteEP is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Вызывающий объект, находящийся выше в стеке вызовов, не имеет разрешения на запрошенную операцию.A caller higher in the call stack does not have permission for the requested operation.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32), либо асинхронная операция уже выполняется.The Socket has been placed in a listening state by calling Listen(Int32), or an asynchronous operation is already in progress.

Examples

В следующем примере кода инициируется асинхронная попытка соединения.The following code example initiates an asynchronous connection attempt.

IPHostEntry^ lipa = Dns::Resolve( "host.contoso.com" );
IPEndPoint^ lep = gcnew IPEndPoint( lipa->AddressList[ 0 ], 11000 );

Socket^ s = gcnew Socket( lep->Address->AddressFamily,
   SocketType::Stream,
   ProtocolType::Tcp );
try
{
   while ( true )
   {
      allDone->Reset();

      Console::WriteLine( "Establishing Connection" );
      s->BeginConnect( lep, gcnew AsyncCallback(
         &Async_Send_Receive::Connect_Callback ), s );

      allDone->WaitOne();
   }
}
catch ( Exception^ e ) 
{
   Console::WriteLine( e );
}
IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);

   Socket s = new Socket(lep.Address.AddressFamily,
                               SocketType.Stream,
                                     ProtocolType.Tcp);
   try{

             while(true){
             allDone.Reset();

             Console.WriteLine("Establishing Connection");
             s.BeginConnect(lep, new AsyncCallback(Async_Send_Receive.Connect_Callback), s);

             allDone.WaitOne();
        }
   }
   catch (Exception e){
        Console.WriteLine(e.ToString());
   }
    Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com")
    Dim lep As New IPEndPoint(lipa.AddressList(0), 11000)
    
    Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
    Try
       
       While True
          allDone.Reset()
          
          Console.WriteLine("Establishing Connection")

          s.BeginConnect(lep, New AsyncCallback(AddressOf Async_Send_Receive.Connect_Callback), s)
          
          allDone.WaitOne()
       End While
    Catch e As Exception
       Console.WriteLine(e.ToString())
    End Try
 End Sub

Remarks

При использовании протокола, ориентированного на соединение, метод BeginConnect запускает асинхронный запрос соединения с параметром remoteEP.If you are using a connection-oriented protocol, the BeginConnect method starts an asynchronous request for a connection to the remoteEP parameter. Если используется протокол без подключения, BeginConnect устанавливает удаленный узел по умолчанию.If you are using a connectionless protocol, BeginConnect establishes a default remote host. Подключение или установка удаленного узла по умолчанию асинхронно дает возможность отправлять и получать данные в отдельном потоке выполнения.Connecting or setting the default remote host asynchronously gives you the ability to send and receive data within a separate execution thread.

Можно создать метод обратного вызова, который реализует делегат AsyncCallback и передать его имя в метод BeginConnect.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginConnect method. Как минимум, необходимо передать Socket в BeginConnect с помощью параметра state.At the very minimum, you must pass the Socket to BeginConnect through the state parameter. Если для обратного вызова требуются дополнительные сведения, можно создать небольшой класс для хранения Socketи другие необходимые сведения.If your callback needs more information, you can create a small class to hold the Socket, and the other required information. Передайте экземпляр этого класса в метод BeginConnect с помощью параметра state.Pass an instance of this class to the BeginConnect method through the state parameter.

Метод обратного вызова должен вызывать метод EndConnect.Your callback method should invoke the EndConnect method. Когда приложение вызывает BeginConnect, система будет использовать отдельный поток для выполнения указанного метода обратного вызова и будет блокироваться на EndConnect до тех пор, пока Socket не подключится к серверу или не выдаст исключение.When your application calls BeginConnect, the system will use a separate thread to execute the specified callback method, and will block on EndConnect until the Socket connects successfully or throws an exception. Если вы хотите, чтобы исходный поток блокировался после вызова метода BeginConnect, используйте WaitOne.If you want the original thread to block after you call the BeginConnect method, use WaitOne. Вызовите метод Set для ManualResetEvent в методе обратного вызова, если необходимо, чтобы исходный поток продолжал выполнение.Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing. Дополнительные сведения о написании методов обратного вызова см. в разделе маршалирование делегата в качестве метода обратного вызова.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Если используется протокол без установления соединения, например UDP, не нужно вызывать BeginConnect перед отправкой и получением данных.If you are using a connectionless protocol such as UDP, you do not have to call BeginConnect before sending and receiving data. Для взаимодействия с удаленным узлом можно использовать BeginSendTo и BeginReceiveFrom.You can use BeginSendTo and BeginReceiveFrom to communicate with a remote host. При вызове BeginConnectвсе датаграммы, поступающие с адреса, отличного от указанного по умолчанию, будут удалены.If you do call BeginConnect, any datagrams that arrive from an address other than the specified default will be discarded. Если вы хотите задать для удаленного узла по умолчанию широковещательный адрес, сначала необходимо вызвать SetSocketOption и настроить вещание на true.If you wish to set your default remote host to a broadcast address, you must first call SetSocketOption and set Broadcast to true. Если это невозможно, BeginConnect выдаст SocketException.If you cannot, BeginConnect will throw a SocketException.

Если вы используете протокол, ориентированный на подключение, и не вызываете Bind перед вызовом BeginConnect, базовый поставщик услуг присвоит наиболее подходящий локальный сетевой адрес и номер порта.If you are using a connection-oriented protocol and do not call Bind before calling BeginConnect, the underlying service provider will assign the most appropriate local network address and port number. Если используется протокол без установления соединения, поставщик услуг не присвоит адрес локальной сети и номер порта, пока не будет вызван метод BeginSend или ReceiveFrom.If you are using a connectionless protocol, the service provider will not assign a local network address and port number until you call the BeginSend or ReceiveFrom method. Если вы хотите изменить удаленный узел по умолчанию, вызовите метод BeginConnect еще раз, указав нужную конечную точку.If you want to change the default remote host, call the BeginConnect method again with the desired endpoint.

Чтобы отменить отложенный вызов метода BeginConnect, закройте Socket.To cancel a pending call to the BeginConnect method, close the Socket. При вызове метода Close во время выполнения асинхронной операции вызывается обратный вызов, предоставленный методу BeginConnect.When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginConnect method is called. При последующем вызове метода EndConnect создается ObjectDisposedException, чтобы указать, что операция была отменена.A subsequent call to the EndConnect method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Если этот сокет ранее был отключен, то BeginConnect должен быть вызван в потоке, который не будет выходить до завершения операции.If this socket has previously been disconnected, then BeginConnect must be called on a thread that will not exit until the operation is complete. Это ограничение базового поставщика.This is a limitation of the underlying provider.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

Note

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. После первого использования определенного контекста (определенного асинхронного метода Socket, определенного экземпляра Socket и конкретного обратного вызова), последующие применения этого контекста приводят к повышению производительности.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

See also

BeginConnect(IPAddress, Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается объектом IPAddress и номером порта.The host is specified by an IPAddress and a port number.

public:
 IAsyncResult ^ BeginConnect(System::Net::IPAddress ^ address, int port, AsyncCallback ^ requestCallback, System::Object ^ state);
public:
 IAsyncResult ^ BeginConnect(System::Net::IPAddress ^ address, int port, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginConnect (System.Net.IPAddress address, int port, AsyncCallback requestCallback, object state);
public IAsyncResult BeginConnect (System.Net.IPAddress address, int port, AsyncCallback callback, object state);
member this.BeginConnect : System.Net.IPAddress * int * AsyncCallback * obj -> IAsyncResult
member this.BeginConnect : System.Net.IPAddress * int * AsyncCallback * obj -> IAsyncResult
Public Function BeginConnect (address As IPAddress, port As Integer, requestCallback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginConnect (address As IPAddress, port As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

address
IPAddress

Адрес IPAddress удаленного узла.The IPAddress of the remote host.

port
Int32

Номер порта удаленного узла.The port number of the remote host.

requestCallbackcallback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении операции подключения.An AsyncCallback delegate that references the method to invoke when the connect operation is complete.

state
Object

Пользовательский объект, содержащий информацию об операции подключения.A user-defined object that contains information about the connect operation. Этот объект передается делегату requestCallback по завершении операции.This object is passed to the requestCallback delegate when the operation is complete.

Returns

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное подключение.An IAsyncResult that references the asynchronous connection.

Exceptions

Параметр address равен null.address is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Объект Socket не входит в семейство сокетов.The Socket is not in the socket family.

Недействительный номер порта.The port number is not valid.

Длина параметра address равна нулю.The length of address is zero.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32), либо асинхронная операция уже выполняется.The Socket has been placed in a listening state by calling Listen(Int32), or an asynchronous operation is already in progress.

Examples

В следующем примере кода инициируется асинхронная попытка соединения.The following code example initiates an asynchronous connection attempt.

static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );

// handles the completion of the prior asynchronous 
// connect call. the socket is passed via the objectState 
// paramater of BeginConnect().
static void ConnectCallback1( IAsyncResult^ ar )
{
   allDone->Set();
   Socket^ s = dynamic_cast<Socket^>(ar->AsyncState);
   s->EndConnect( ar );
}


public static ManualResetEvent allDone =
    new ManualResetEvent(false);

// handles the completion of the prior asynchronous
// connect call. the socket is passed via the objectState
// paramater of BeginConnect().
public static void ConnectCallback1(IAsyncResult ar)
{
    allDone.Set();
    Socket s = (Socket) ar.AsyncState;
    s.EndConnect(ar);
}
// Asynchronous connect using the host name, resolved via 
// IPAddress
static void BeginConnect1( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   allDone->Reset();
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->BeginConnect( IPs[ 0 ], port, gcnew AsyncCallback( ConnectCallback1 ), s );
   
   // wait here until the connect finishes.  
   // The callback sets allDone.
   allDone->WaitOne();
   Console::WriteLine( "Connection established" );
}


// Asynchronous connect using the host name, resolved via
// IPAddress
public static void BeginConnect1(string host, int port)
{

    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    allDone.Reset();

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.BeginConnect(IPs[0], port,
        new AsyncCallback(ConnectCallback1), s);

    // wait here until the connect finishes.
    // The callback sets allDone.
    allDone.WaitOne();

    Console.WriteLine("Connection established");
}		

Remarks

Асинхронная BeginConnect операция должна быть завершена путем вызова метода EndConnect.The asynchronous BeginConnect operation must be completed by calling the EndConnect method. Как правило, метод вызывается делегатом requestCallback.Typically, the method is invoked by the requestCallback delegate.

Этот метод не блокируется до завершения операции.This method does not block until the operation is complete. Чтобы заблокировать блокировку до завершения операции, используйте одну из Connect перегрузок метода или EndConnect.To block until the operation is complete, use one of the Connect method overloads, or EndConnect.

Чтобы отменить отложенный вызов метода BeginConnect, закройте Socket.To cancel a pending call to the BeginConnect method, close the Socket. При вызове метода Close во время выполнения асинхронной операции вызывается обратный вызов, предоставленный методу BeginConnect.When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginConnect method is called. При последующем вызове метода EndConnect создается ObjectDisposedException, чтобы указать, что операция была отменена.A subsequent call to the EndConnect method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

Подробные сведения об использовании асинхронной модели программирования см. в разделе асинхронное вызов синхронных методовFor detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Если этот сокет ранее был отключен, то BeginConnect должен быть вызван в потоке, который не будет выходить до завершения операции.If this socket has previously been disconnected, then BeginConnect must be called on a thread that will not exit until the operation is complete. Это ограничение базового поставщика.This is a limitation of the underlying provider. Кроме того, используемое EndPoint должно отличаться.Also the EndPoint that is used must be different.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

Note

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. После первого использования определенного контекста (определенного асинхронного метода Socket, определенного экземпляра Socket и конкретного обратного вызова), последующие применения этого контекста приводят к повышению производительности.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

See also

BeginConnect(IPAddress[], Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается массивом IPAddress и номером порта.The host is specified by an IPAddress array and a port number.

public:
 IAsyncResult ^ BeginConnect(cli::array <System::Net::IPAddress ^> ^ addresses, int port, AsyncCallback ^ requestCallback, System::Object ^ state);
public:
 IAsyncResult ^ BeginConnect(cli::array <System::Net::IPAddress ^> ^ addresses, int port, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginConnect (System.Net.IPAddress[] addresses, int port, AsyncCallback requestCallback, object state);
public IAsyncResult BeginConnect (System.Net.IPAddress[] addresses, int port, AsyncCallback callback, object state);
member this.BeginConnect : System.Net.IPAddress[] * int * AsyncCallback * obj -> IAsyncResult
member this.BeginConnect : System.Net.IPAddress[] * int * AsyncCallback * obj -> IAsyncResult
Public Function BeginConnect (addresses As IPAddress(), port As Integer, requestCallback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginConnect (addresses As IPAddress(), port As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

addresses
IPAddress[]

По крайней мере один IPAddress, обозначающий удаленный узел.At least one IPAddress, designating the remote host.

port
Int32

Номер порта удаленного узла.The port number of the remote host.

requestCallbackcallback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении операции подключения.An AsyncCallback delegate that references the method to invoke when the connect operation is complete.

state
Object

Пользовательский объект, содержащий информацию об операции подключения.A user-defined object that contains information about the connect operation. Этот объект передается делегату requestCallback по завершении операции.This object is passed to the requestCallback delegate when the operation is complete.

Returns

IAsyncResult

IAsyncResult, который ссылается на асинхронное подключение.An IAsyncResult that references the asynchronous connections.

Exceptions

Параметр addresses равен null.addresses is null.

Произошла ошибка при попытке доступа к сокету.An error occurred when attempting to access the socket.

Socket был закрыт.The Socket has been closed.

Этот метод допустим для сокетов, использующих InterNetwork или InterNetworkV6.This method is valid for sockets that use InterNetwork or InterNetworkV6.

Недействительный номер порта.The port number is not valid.

Длина параметра address равна нулю.The length of address is zero.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32), либо асинхронная операция уже выполняется.The Socket has been placed in a listening state by calling Listen(Int32), or an asynchronous operation is already in progress.

Examples

В следующем примере кода инициируется асинхронная попытка соединения.The following code example initiates an asynchronous connection attempt.

static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );

// handles the completion of the prior asynchronous 
// connect call. the socket is passed via the objectState 
// paramater of BeginConnect().
static void ConnectCallback1( IAsyncResult^ ar )
{
   allDone->Set();
   Socket^ s = dynamic_cast<Socket^>(ar->AsyncState);
   s->EndConnect( ar );
}


public static ManualResetEvent allDone =
    new ManualResetEvent(false);

// handles the completion of the prior asynchronous
// connect call. the socket is passed via the objectState
// paramater of BeginConnect().
public static void ConnectCallback1(IAsyncResult ar)
{
    allDone.Set();
    Socket s = (Socket) ar.AsyncState;
    s.EndConnect(ar);
}
// Asynchronous connect, using DNS.ResolveToAddresses
static void BeginConnect2( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   allDone->Reset();
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->BeginConnect( IPs, port, gcnew AsyncCallback( ConnectCallback1 ), s );
   
   // wait here until the connect finishes.  The callback 
   // sets allDone.
   allDone->WaitOne();
   Console::WriteLine( "Connection established" );
}



// Asynchronous connect, using DNS.GetHostAddresses
public static void BeginConnect2(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    allDone.Reset();

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.BeginConnect(IPs, port,
        new AsyncCallback(ConnectCallback1), s);

    // wait here until the connect finishes.  The callback
    // sets allDone.
    allDone.WaitOne();

    Console.WriteLine("Connection established");
}		

Remarks

Асинхронная BeginConnect операция должна быть завершена путем вызова метода EndConnect.The asynchronous BeginConnect operation must be completed by calling the EndConnect method. Как правило, метод вызывается делегатом requestCallback.Typically, the method is invoked by the requestCallback delegate.

Этот метод не блокируется до завершения операции.This method does not block until the operation is complete. Чтобы заблокировать блокировку до завершения операции, используйте одну из перегрузок метода Connect.To block until the operation is complete, use one of the Connect method overloads.

Чтобы отменить отложенный вызов метода BeginConnect, закройте Socket.To cancel a pending call to the BeginConnect method, close the Socket. При вызове метода Close во время выполнения асинхронной операции вызывается обратный вызов, предоставленный методу BeginConnect.When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginConnect method is called. При последующем вызове метода EndConnect создается ObjectDisposedException, чтобы указать, что операция была отменена.A subsequent call to the EndConnect method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

Подробные сведения об использовании асинхронной модели программирования см. в разделе асинхронный вызов синхронных методов.For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously.

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Если этот сокет ранее был отключен, то BeginConnect должен быть вызван в потоке, который не будет выходить до завершения операции.If this socket has previously been disconnected, then BeginConnect must be called on a thread that will not exit until the operation is complete. Это ограничение базового поставщика.This is a limitation of the underlying provider. Кроме того, используемое EndPoint должно отличаться.Also the EndPoint that is used must be different.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

Note

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. После первого использования определенного контекста (определенного асинхронного метода Socket, определенного экземпляра Socket и конкретного обратного вызова), последующие применения этого контекста приводят к повышению производительности.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

See also

BeginConnect(String, Int32, AsyncCallback, Object)

Начинает выполнение асинхронного запроса для подключения к удаленному узлу.Begins an asynchronous request for a remote host connection. Узел задается именем узла и номером порта.The host is specified by a host name and a port number.

public:
 IAsyncResult ^ BeginConnect(System::String ^ host, int port, AsyncCallback ^ requestCallback, System::Object ^ state);
public:
 IAsyncResult ^ BeginConnect(System::String ^ host, int port, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginConnect (string host, int port, AsyncCallback requestCallback, object state);
public IAsyncResult BeginConnect (string host, int port, AsyncCallback callback, object state);
member this.BeginConnect : string * int * AsyncCallback * obj -> IAsyncResult
member this.BeginConnect : string * int * AsyncCallback * obj -> IAsyncResult
Public Function BeginConnect (host As String, port As Integer, requestCallback As AsyncCallback, state As Object) As IAsyncResult
Public Function BeginConnect (host As String, port As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

host
String

Имя удаленного узла.The name of the remote host.

port
Int32

Номер порта удаленного узла.The port number of the remote host.

requestCallbackcallback
AsyncCallback

Делегат AsyncCallback, ссылающийся на метод, вызываемый по завершении операции подключения.An AsyncCallback delegate that references the method to invoke when the connect operation is complete.

state
Object

Пользовательский объект, содержащий информацию об операции подключения.A user-defined object that contains information about the connect operation. Этот объект передается делегату requestCallback по завершении операции.This object is passed to the requestCallback delegate when the operation is complete.

Returns

IAsyncResult

Объект IAsyncResult, который ссылается на асинхронное подключение.An IAsyncResult that references the asynchronous connection.

Exceptions

Параметр host равен null.host is null.

Socket был закрыт.The Socket has been closed.

Этот метод допустим для сокетов в семействах InterNetwork или InterNetworkV6.This method is valid for sockets in the InterNetwork or InterNetworkV6 families.

Недействительный номер порта.The port number is not valid.

Сокет Socket был переведен в состояние прослушивания путем вызова Listen(Int32), либо асинхронная операция уже выполняется.The Socket has been placed in a listening state by calling Listen(Int32), or an asynchronous operation is already in progress.

Examples

В следующем примере кода инициируется асинхронная попытка соединения.The following code example initiates an asynchronous connection attempt.

static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );

// handles the completion of the prior asynchronous 
// connect call. the socket is passed via the objectState 
// paramater of BeginConnect().
static void ConnectCallback1( IAsyncResult^ ar )
{
   allDone->Set();
   Socket^ s = dynamic_cast<Socket^>(ar->AsyncState);
   s->EndConnect( ar );
}


public static ManualResetEvent allDone =
    new ManualResetEvent(false);

// handles the completion of the prior asynchronous
// connect call. the socket is passed via the objectState
// paramater of BeginConnect().
public static void ConnectCallback1(IAsyncResult ar)
{
    allDone.Set();
    Socket s = (Socket) ar.AsyncState;
    s.EndConnect(ar);
}
// Asynchronous connect using host name (resolved by the 
// BeginConnect call.)
static void BeginConnect3( String^ host, int port )
{
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   allDone->Reset();
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->BeginConnect( host, port, gcnew AsyncCallback( ConnectCallback1 ), s );
   
   // wait here until the connect finishes.  The callback 
   // sets allDone.
   allDone->WaitOne();
   Console::WriteLine( "Connection established" );
}


// Asynchronous connect using host name (resolved by the
// BeginConnect call.)
public static void BeginConnect3(string host, int port)
{
    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    allDone.Reset();

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.BeginConnect(host, port,
        new AsyncCallback(ConnectCallback1), s);

    // wait here until the connect finishes.  The callback
    // sets allDone.
    allDone.WaitOne();

    Console.WriteLine("Connection established");
}		

Remarks

Асинхронная BeginConnect операция должна быть завершена путем вызова метода EndConnect.The asynchronous BeginConnect operation must be completed by calling the EndConnect method. Как правило, метод вызывается делегатом requestCallback.Typically, the method is invoked by the requestCallback delegate.

Этот метод не блокируется до завершения операции.This method does not block until the operation is complete. Чтобы заблокировать блокировку до завершения операции, используйте одну из перегрузок метода Connect.To block until the operation is complete, use one of the Connect method overloads.

Чтобы отменить отложенный вызов метода BeginConnect, закройте Socket.To cancel a pending call to the BeginConnect method, close the Socket. При вызове метода Close во время выполнения асинхронной операции вызывается обратный вызов, предоставленный методу BeginConnect.When the Close method is called while an asynchronous operation is in progress, the callback provided to the BeginConnect method is called. При последующем вызове метода EndConnect создается ObjectDisposedException, чтобы указать, что операция была отменена.A subsequent call to the EndConnect method will throw an ObjectDisposedException to indicate that the operation has been cancelled.

Подробные сведения об использовании асинхронной модели программирования см. в разделе асинхронное вызов синхронных методовFor detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Note

Если вы получаете SocketException, используйте свойство SocketException.ErrorCode для получения конкретного кода ошибки.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. После получения этого кода обратитесь к документации по коду ошибки API Windows Sockets версии 2 для получения подробного описания ошибки.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Note

Если этот сокет ранее был отключен, то BeginConnect должен быть вызван в потоке, который не будет выходить до завершения операции.If this socket has previously been disconnected, then BeginConnect must be called on a thread that will not exit until the operation is complete. Это ограничение базового поставщика.This is a limitation of the underlying provider. Кроме того, используемое EndPoint должно отличаться.Also the EndPoint that is used must be different.

Note

Данный член генерирует сведения трассировки, если в приложении включена трассировка сети.This member outputs trace information when you enable network tracing in your application. Дополнительные сведения см. в разделе Сетевая трассировка в .NET Framework.For more information, see Network Tracing in the .NET Framework.

Note

Контекст выполнения (контекст безопасности, олицетворенный пользователь и вызывающий контекст) кэшируется для асинхронных Socket методов.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. После первого использования определенного контекста (определенного асинхронного метода Socket, определенного экземпляра Socket и конкретного обратного вызова), последующие применения этого контекста приводят к повышению производительности.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

See also

Applies to