Socket.Connect Metoda

Definicja

Ustanawia połączenie z hostem zdalnym.

Przeciążenia

Connect(EndPoint)

Ustanawia połączenie z hostem zdalnym.

Connect(IPAddress, Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określony przez adres IP i numer portu.

Connect(IPAddress[], Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określany przez tablicę adresów IP i numer portu.

Connect(String, Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określany przez nazwę hosta i numer portu.

Connect(EndPoint)

Ustanawia połączenie z hostem zdalnym.

public:
 void Connect(System::Net::EndPoint ^ remoteEP);
public void Connect (System.Net.EndPoint remoteEP);
member this.Connect : System.Net.EndPoint -> unit
Public Sub Connect (remoteEP As EndPoint)

Parametry

remoteEP
EndPoint

Element EndPoint reprezentujący urządzenie zdalne.

Wyjątki

remoteEP to null.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Została zamknięta Socket .

Obiekt wywołujący wyższy w stosie wywołań nie ma uprawnień do żądanej operacji.

Element Socket został umieszczony w stanie nasłuchiwania przez wywołanie metody Listen(Int32).

Przykłady

Poniższy przykład kodu nawiązuje połączenie z zdalnym punktem końcowym, a następnie weryfikuje połączenie.

client->Connect( anEndPoint );
if (  !client->Connected )
{
   Console::WriteLine( "Winsock error: {0}", Convert::ToString(
      System::Runtime::InteropServices::Marshal::GetLastWin32Error() ) );
}
   
// This is how you can determine whether a socket is still connected.
bool blockingState = client->Blocking;
try
{
   array<Byte>^tmp = gcnew array<Byte>(1);
   client->Blocking = false;
   client->Send( tmp, 0, static_cast<SocketFlags>(0) );
   Console::WriteLine( L"Connected!" );
}
catch ( SocketException^ e ) 
{
   // 10035 == WSAEWOULDBLOCK
   if ( e->NativeErrorCode.Equals( 10035 ) )
   {
      Console::WriteLine( "Connected from an exception!" );
   }
   else
   {
      Console::WriteLine( "Disconnected: {0}!", e->NativeErrorCode );
   }
}
finally
{
   client->Blocking = blockingState;
}

Console::WriteLine( "Connected: {0}", client->Connected );
// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);

// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
    byte [] tmp = new byte[1];

    client.Blocking = false;
    client.Send(tmp, 0, 0);
    Console.WriteLine("Connected!");
}
catch (SocketException e)
{
    // 10035 == WSAEWOULDBLOCK
    if (e.NativeErrorCode.Equals(10035))
    {
        Console.WriteLine("Still Connected, but the Send would block");
    }
    else
    {
        Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
    }
}
finally
{
    client.Blocking = blockingState;
}

Console.WriteLine("Connected: {0}", client.Connected);
    ' .Connect throws an exception if unsuccessful
    client.Connect(anEndPoint)
    
    ' This is how you can determine whether a socket is still connected.
    Dim blockingState As Boolean = client.Blocking
    Try
        Dim tmp(0) As Byte
        
        client.Blocking = False
        client.Send(tmp, 0, 0)
        Console.WriteLine("Connected!")
    Catch e As SocketException
        ' 10035 == WSAEWOULDBLOCK
        If e.NativeErrorCode.Equals(10035) Then
            Console.WriteLine("Still Connected, but the Send would block")
        Else
            Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode)
        End If
    Finally
        client.Blocking = blockingState
    End Try
    
    Console.WriteLine("Connected: {0}", client.Connected)

End Sub

Uwagi

Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, Connect metoda synchronicznie ustanawia połączenie sieciowe między LocalEndPoint określonym zdalnym punktem końcowym. Jeśli używasz protokołu bez połączenia, Connect ustanawia domyślny host zdalny. Po wywołaniu metody Connectmożna wysyłać dane do urządzenia Send zdalnego za pomocą metody lub odbierać dane z urządzenia zdalnego za Receive pomocą metody .

Jeśli używasz protokołu bez połączenia, takiego jak UDP, nie musisz wywoływać przed Connect wysłaniem i odebraniem danych. Można używać SendTo funkcji i ReceiveFrom synchronicznie komunikować się z hostem zdalnym. Jeśli wywołasz metodę Connect, wszystkie datagramy, które docierają z adresu innego niż określona wartość domyślna, zostaną odrzucone. Jeśli chcesz ustawić domyślnego hosta zdalnego na adres emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast, lub Connect zgłosi wartość SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.

Metoda Connect zostanie zablokowana, chyba że właściwość zostanie ustawiona Blocking na wartość false przed wywołaniem Connectmetody . Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP i wyłączasz blokowanie, zgłasza błądSocketException, Connect ponieważ wymaga czasu na nawiązanie połączenia. Protokoły bez połączenia nie zgłaszają wyjątku, ponieważ po prostu ustanawiają domyślny host zdalny. Możesz użyć SocketException.ErrorCode polecenia , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu. Jeśli błąd zwrócił polecenie WSAEWOULDBLOCK, połączenie hosta zdalnego zostało zainicjowane przez obiekt zorientowany Socketna połączenie, ale nie zostało jeszcze zakończone pomyślnie. Poll Użyj metody , aby określić, kiedy Socket kończy się nawiązywanie połączenia.

Uwaga

Jeśli używasz protokołu zorientowanego na połączenie i nie wywołaliśmy go przed wywołaniem Bind Connect, podstawowy dostawca usług przypisze adres sieci lokalnej i numer portu. Jeśli używasz protokołu bez połączenia, dostawca usług nie przypisze lokalnego adresu sieciowego i numeru portu do momentu ukończenia operacji wysyłania lub odbierania. Jeśli chcesz zmienić domyślny host zdalny, wywołaj Connect ponownie żądany punkt końcowy.

Uwaga

Jeśli gniazdo zostało wcześniej rozłączone, nie można użyć tej metody do przywrócenia połączenia. Użyj jednej z metod asynchronicznych BeginConnect , aby ponownie nawiązać połączenie. Jest to ograniczenie podstawowego dostawcy.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Zobacz też

Dotyczy

Connect(IPAddress, Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określony przez adres IP i numer portu.

public:
 void Connect(System::Net::IPAddress ^ address, int port);
public void Connect (System.Net.IPAddress address, int port);
member this.Connect : System.Net.IPAddress * int -> unit
Public Sub Connect (address As IPAddress, port As Integer)

Parametry

address
IPAddress

Adres IP hosta zdalnego.

port
Int32

Numer portu hosta zdalnego.

Wyjątki

address to null.

Numer portu jest nieprawidłowy.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Element Socket został zamknięty.

Ta metoda jest prawidłowa w przypadku gniazd w InterNetwork rodzinach lub InterNetworkV6 .

Długość address to zero.

Element Socket został umieszczony w stanie nasłuchiwania przez wywołanie metody Listen(Int32).

Przykłady

Poniższy przykład kodu nawiązuje połączenie z zdalnym punktem końcowym, a następnie weryfikuje połączenie.

// Synchronous connect using IPAddress to resolve the 
// host name.
static void Connect1( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( IPs[ 0 ], port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using IPAddress to resolve the
// host name.
public static void Connect1(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

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

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(IPs[0], port);
    Console.WriteLine("Connection established");
}

Uwagi

Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, Connect metoda synchronicznie ustanawia połączenie sieciowe między LocalEndPoint określonym zdalnym punktem końcowym. Jeśli używasz protokołu bez połączenia, Connect ustanawia domyślny host zdalny. Po wywołaniu Connect można wysłać dane do urządzenia zdalnego za pomocą Send metody lub odebrać dane z urządzenia zdalnego za Receive pomocą metody .

Jeśli używasz protokołu bez połączenia, takiego jak UDP, nie musisz wywoływać przed Connect wysłaniem i odebraniem danych. Można używać SendTo funkcji i ReceiveFrom synchronicznie komunikować się z hostem zdalnym. Jeśli wywołasz Connect dowolne datagramy, które docierają z adresu innego niż określona wartość domyślna, zostaną odrzucone. Jeśli chcesz ustawić domyślnego hosta zdalnego na adres emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast, lub Connect zgłosi wartość SocketException. Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.

Connect metoda zostanie zablokowana, chyba że właściwość zostanie ustawiona Blocking na wartość false przed wywołaniem Connectmetody . Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP i wyłączasz blokowanie, zgłasza błądSocketException, Connect ponieważ wymaga czasu na nawiązanie połączenia. Protokoły bez połączenia nie zgłaszają wyjątku, ponieważ po prostu ustanawiają domyślny host zdalny. Możesz użyć SocketException.ErrorCode polecenia , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu. Jeśli błąd zwrócił polecenie WSAEWOULDBLOCK, połączenie hosta zdalnego zostało zainicjowane przez obiekt zorientowany Socketna połączenie, ale nie zostało jeszcze zakończone pomyślnie. Poll Użyj metody , aby określić, kiedy Socket kończy się nawiązywanie połączenia.

Uwaga

Jeśli używasz protokołu zorientowanego na połączenie i nie wywołaliśmy go przed wywołaniem Bind Connect, podstawowy dostawca usług przypisze adres sieci lokalnej i numer portu. Jeśli używasz protokołu bez połączenia, dostawca usług nie przypisze lokalnego adresu sieciowego i numeru portu do momentu ukończenia operacji wysyłania lub odbierania. Jeśli chcesz zmienić domyślny host zdalny, wywołaj Connect ponownie żądany punkt końcowy.

Uwaga

Jeśli gniazdo zostało wcześniej rozłączone, nie można użyć tej metody do przywrócenia połączenia. Użyj jednej z metod asynchronicznych BeginConnect , aby ponownie nawiązać połączenie. Jest to ograniczenie podstawowego dostawcy.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

Connect(IPAddress[], Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określany przez tablicę adresów IP i numer portu.

public:
 void Connect(cli::array <System::Net::IPAddress ^> ^ addresses, int port);
public void Connect (System.Net.IPAddress[] addresses, int port);
member this.Connect : System.Net.IPAddress[] * int -> unit
Public Sub Connect (addresses As IPAddress(), port As Integer)

Parametry

addresses
IPAddress[]

Adresy IP hosta zdalnego.

port
Int32

Numer portu hosta zdalnego.

Wyjątki

addresses to null.

Numer portu jest nieprawidłowy.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Element Socket został zamknięty.

Gniazdo nie znajduje się w rodzinach InterNetwork ani InterNetworkV6 .

Długość address to zero.

Element Socket został umieszczony w stanie nasłuchiwania przez wywołanie metody Listen(Int32).

Przykłady

Poniższy przykład kodu łączy się z zdalnym punktem końcowym, a następnie weryfikuje połączenie.

// Synchronous connect using Dns.ResolveToAddresses to 
// resolve the host name.
static void Connect2( String^ host, int port )
{
   array<IPAddress^>^IPs = Dns::GetHostAddresses( host );
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( IPs, port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using Dns.GetHostAddresses to
// resolve the host name.
public static void Connect2(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);
    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(IPs, port);
    Console.WriteLine("Connection established");
}

Uwagi

Ta metoda jest zwykle używana bezpośrednio po wywołaniu metody GetHostAddresses, która może zwrócić wiele adresów IP dla jednego hosta. Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, Connect metoda synchronicznie ustanawia połączenie sieciowe między LocalEndPoint i określonym zdalnym punktem końcowym. Jeśli używasz protokołu bez połączenia, Connect ustanawia domyślny host zdalny. Po wywołaniu Connect możesz wysłać dane do urządzenia zdalnego za pomocą Send metody lub odebrać dane z urządzenia zdalnego za Receive pomocą metody .

Jeśli używasz protokołu bez połączenia, takiego jak UDP, nie musisz wywoływać Connect przed wysłaniem i odebraniem danych. Można używać poleceń SendTo i ReceiveFrom do synchronicznego komunikowania się z hostem zdalnym. Jeśli wywołasz Connect wszelkie datagramy, które docierają z adresu innego niż określona wartość domyślna, zostaną odrzucone. Jeśli chcesz ustawić domyślnego hosta zdalnego na adres emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast, lub Connect zgłosi .SocketException Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.

Connect metoda zostanie zablokowana, chyba że właściwość zostanie ustawiona Blocking na false wartość przed wywołaniem metody Connect. Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, i wyłączasz blokowanie, zgłosi SocketException wyjątek , Connect ponieważ wymaga czasu na nawiązanie połączenia. Protokoły bez połączenia nie zgłaszają wyjątku, ponieważ po prostu ustanawiają domyślny host zdalny. Możesz użyć SocketException.ErrorCode polecenia , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu. Jeśli błąd zwrócił WSAEWOULDBLOCK, połączenie hosta zdalnego zostało zainicjowane przez zorientowane na Socketpołączenie , ale nie zostało jeszcze zakończone pomyślnie. Poll Użyj metody , aby określić, kiedy Socket połączenie zostało zakończone.

Uwaga

Jeśli używasz protokołu zorientowanego na połączenie i nie wywołasz Bind go przed wywołaniem Connectmetody , podstawowy dostawca usług przypisze lokalny adres sieciowy i numer portu. Jeśli używasz protokołu bez połączenia, dostawca usług nie przypisze lokalnego adresu sieciowego i numeru portu do momentu ukończenia operacji wysyłania lub odbierania. Jeśli chcesz zmienić domyślnego hosta zdalnego, ponownie wywołaj Connect metodę z żądanym punktem końcowym.

Uwaga

Jeśli gniazdo zostało wcześniej odłączone, nie można użyć tej metody do przywrócenia połączenia. Aby ponownie nawiązać połączenie, użyj jednej z metod asynchronicznych BeginConnect . Jest to ograniczenie dostawcy bazowego.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy

Connect(String, Int32)

Ustanawia połączenie z hostem zdalnym. Host jest określany przez nazwę hosta i numer portu.

public:
 void Connect(System::String ^ host, int port);
public void Connect (string host, int port);
member this.Connect : string * int -> unit
Public Sub Connect (host As String, port As Integer)

Parametry

host
String

Nazwa hosta zdalnego.

port
Int32

Numer portu hosta zdalnego.

Wyjątki

host to null.

Numer portu jest nieprawidłowy.

Wystąpił błąd podczas próby uzyskania dostępu do gniazda.

Element Socket został zamknięty.

Gniazdo nie znajduje się w rodzinach InterNetwork ani InterNetworkV6 .

Element Socket został umieszczony w stanie nasłuchiwania przez wywołanie metody Listen(Int32).

Przykłady

Poniższy przykład kodu łączy się z zdalnym punktem końcowym, a następnie weryfikuje połączenie.

// Synchronous connect using host name (resolved by the 
// Connect call.)
static void Connect3( String^ host, int port )
{
   Socket^ s = gcnew Socket( AddressFamily::InterNetwork,SocketType::Stream,ProtocolType::Tcp );
   Console::WriteLine( "Establishing Connection to {0}", host );
   s->Connect( host, port );
   Console::WriteLine( "Connection established" );
}
// Synchronous connect using host name (resolved by the
// Connect call.)
public static void Connect3(string host, int port)
{
    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    Console.WriteLine("Establishing Connection to {0}",
        host);
    s.Connect(host, port);
    Console.WriteLine("Connection established");
}

Uwagi

Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, Connect metoda synchronicznie ustanawia połączenie sieciowe między LocalEndPoint i określonym hostem zdalnym. Jeśli używasz protokołu bez połączenia, Connect ustanawia domyślny host zdalny. Po wywołaniu Connect możesz wysłać dane do urządzenia zdalnego za pomocą Send metody lub odebrać dane z urządzenia zdalnego za Receive pomocą metody .

Jeśli używasz protokołu bez połączenia, takiego jak UDP, nie musisz wywoływać Connect przed wysłaniem i odebraniem danych. Można używać poleceń SendTo i ReceiveFrom do synchronicznego komunikowania się z hostem zdalnym. Jeśli wywołasz Connect wszelkie datagramy, które docierają z adresu innego niż określona wartość domyślna, zostaną odrzucone. Jeśli chcesz ustawić domyślnego hosta zdalnego na adres emisji, musisz najpierw wywołać metodę SetSocketOption i ustawić opcję gniazda na SocketOptionName.Broadcast, lub Connect zgłosi .SocketException Jeśli zostanie wyświetlony element SocketException, użyj SocketException.ErrorCode właściwości , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu.

Metoda Connect zostanie zablokowana, chyba że właściwość zostanie ustawiona Blocking na false wartość przed wywołaniem metody Connect. Jeśli używasz protokołu zorientowanego na połączenie, takiego jak TCP, i wyłączasz blokowanie, zgłosi błąd SocketException , Connect ponieważ wymaga czasu na nawiązanie połączenia. Protokoły bez połączenia nie zgłaszają wyjątku, ponieważ po prostu ustanawiają domyślny host zdalny. Możesz użyć SocketException.ErrorCode polecenia , aby uzyskać określony kod błędu. Po uzyskaniu tego kodu zapoznaj się z dokumentacją kodu błędu interfejsu API Windows Sockets w wersji 2, aby uzyskać szczegółowy opis błędu. Jeśli błąd zwrócił WSAEWOULDBLOCK, połączenie hosta zdalnego zostało zainicjowane przez zorientowane na Socketpołączenie , ale nie zostało jeszcze zakończone pomyślnie. Poll Użyj metody , aby określić, kiedy Socket połączenie zostało zakończone.

Jeśli protokół IPv6 jest włączony, a Connect(String, Int32) metoda jest wywoływana w celu nawiązania połączenia z hostem rozpoznanym zarówno adresami IPv6, jak i IPv4, połączenie z adresem IPv6 zostanie podjęta najpierw przed adresem IPv4. Może to mieć wpływ na opóźnienie czasu ustanowienia połączenia, jeśli host nie nasłuchuje na adresie IPv6.

Uwaga

Jeśli używasz protokołu zorientowanego na połączenie i nie wywołasz Bind go przed wywołaniem Connectmetody , podstawowy dostawca usług przypisze lokalny adres sieciowy i numer portu. Jeśli używasz protokołu bez połączenia, dostawca usług nie przypisze lokalnego adresu sieciowego i numeru portu do momentu ukończenia operacji wysyłania lub odbierania. Jeśli chcesz zmienić domyślnego hosta zdalnego, ponownie wywołaj Connect metodę z żądanym punktem końcowym.

Uwaga

Jeśli gniazdo zostało wcześniej odłączone, nie można użyć tej metody do przywrócenia połączenia. Aby ponownie nawiązać połączenie, użyj jednej z metod asynchronicznych BeginConnect . Jest to ograniczenie dostawcy bazowego.

Uwaga

Ten element członkowski generuje informacje ze śledzenia pod warunkiem włączenia funkcji śledzenia sieci w aplikacji. Aby uzyskać więcej informacji, zobacz Śledzenie sieci w .NET Framework.

Dotyczy