Socket.Send Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wysyła dane do połączonego Socketpliku .
Przeciążenia
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError) |
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu . |
Send(ReadOnlySpan<Byte>) |
Wysyła dane do połączonego Socket. |
Send(Byte[], Int32, Int32, SocketFlags, SocketError) |
Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego SocketFlags. |
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError) |
Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu . |
Send(Byte[], Int32, Int32, SocketFlags) |
Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego SocketFlags. |
Send(Byte[], Int32, SocketFlags) |
Wysyła określoną liczbę bajtów danych do połączonego Socketobiektu przy użyciu określonego SocketFlagselementu . |
Send(IList<ArraySegment<Byte>>) |
Wysyła zestaw buforów na liście do połączonego Socketelementu . |
Send(IList<ArraySegment<Byte>>, SocketFlags) |
Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu . |
Send(Byte[], SocketFlags) |
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu . |
Send(ReadOnlySpan<Byte>, SocketFlags) |
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu . |
Send(Byte[]) |
Wysyła dane do połączonego Socket. |
Send(ReadOnlySpan<Byte>, SocketFlags, SocketError)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .
public:
int Send(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send (ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.
- errorCode
- SocketError
Gdy ta metoda zostanie zwrócona, zawiera jedną z wartości wyliczenia, która definiuje kody błędów dla gniazda.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Uwagi
Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, wartość domyślna przesunięcia buforu to 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.
Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.
Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
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 gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
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.
Ważne
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
Zobacz też
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(ReadOnlySpan<Byte>)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do połączonego Socket.
public:
int Send(ReadOnlySpan<System::Byte> buffer);
public int Send (ReadOnlySpan<byte> buffer);
member this.Send : ReadOnlySpan<byte> -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte)) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Uwagi
Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, wartość domyślna przesunięcia buforu to 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.
Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć Accept go do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.
Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
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 gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
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.
Ważne
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
Zobacz też
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(Byte[], Int32, Int32, SocketFlags, SocketError)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła określoną liczbę bajtów danych do połączonego Socket, zaczynając od określonego przesunięcia i używając określonego SocketFlags.
public:
int Send(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer
Parametry
- offset
- Int32
Pozycja w buforze danych, w którym należy rozpocząć wysyłanie danych.
- size
- Int32
Liczba bajtów do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
- errorCode
- SocketError
SocketError Obiekt, który przechowuje błąd gniazda.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffer
to null
.
offset
wartość jest mniejsza niż 0.
-lub-
offset
jest większa niż długość obiektu buffer
.
-lub-
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość buffer
minus wartości parametru offset
.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Wystąpił błąd systemu operacyjnego podczas uzyskiwania dostępu do elementu Socket.
Została zamknięta Socket .
Przykłady
Poniższy przykład kodu określa bufor danych, przesunięcie, rozmiar i SocketFlags wysyłanie danych do połączonego elementu Socket.
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
int SendReceiveTest4( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int byteCount = server->Send( msg, 0, msg->Length, SocketFlags::None );
Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
// Get reply from the server.
byteCount = server->Receive( bytes, 0, server->Available,
SocketFlags::None );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return (e->ErrorCode);
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
public static int SendReceiveTest4(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int byteCount = server.Send(msg, 0, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", byteCount);
// Get reply from the server.
byteCount = server.Receive(bytes, 0, bytes.Length, SocketFlags.None);
if (byteCount > 0)
Console.WriteLine(Encoding.UTF8.GetString(bytes, 0, byteCount));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
Console.WriteLine("Sent {0} bytes.", byteCount)
' Get reply from the server.
byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
If byteCount > 0 Then
Console.WriteLine(Encoding.UTF8.GetString(bytes))
End If
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest4
Uwagi
Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
W tym przeciążeniu, jeśli określisz flagę DontRoutesocketflags
jako parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć polecenia SendTo. Jeśli nie używasz SendTometody , musisz wywołać wywołanie przed każdym wywołaniem Connect metody Send. Jest w porządku, aby użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego z .Connect Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.
Należy również upewnić się, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException.
Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba żądanych bajtów. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
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 gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
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ż
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(IList<ArraySegment<Byte>>, SocketFlags, SocketError)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła zestaw buforów na liście do połączonego Socketelementu , przy użyciu określonego SocketFlagselementu .
public:
int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int Send (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError) As Integer
Parametry
- buffers
- IList<ArraySegment<Byte>>
Lista ArraySegment<T>typów Byte zawierających dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
- errorCode
- SocketError
SocketError Obiekt, który przechowuje błąd gniazda.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffers
to null
.
buffers
jest pusty.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Została zamknięta Socket .
Uwagi
To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0. Jeśli określisz flagę DontRoutesocketFlags
jako parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody, musisz wywołać metodę przed każdym wywołaniem Connect metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.
Jeśli używasz protokołu zorientowanego na połączenie, Send zostanie zablokowany do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie braku blokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła on mniej niż liczbę bajtów w buforze. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane będą natychmiast wyświetlane w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości danych wychodzących. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce na buforować dane dla wysyłania sieciowego.
Uwaga
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 gniazda systemu Windows w wersji 2 , aby uzyskać szczegółowy opis błędu.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania danych do przesłania, wyślij blok, chyba że gniazdo zostało umieszczone w trybie odblokowywania.
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
Send(Byte[], Int32, Int32, SocketFlags)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła określoną liczbę bajtów danych do połączonego Socketobiektu , począwszy od określonego przesunięcia i przy użyciu określonego SocketFlags.
public:
int Send(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Send (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * int * int * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags) As Integer
Parametry
- offset
- Int32
Pozycja w buforze danych, w którym należy rozpocząć wysyłanie danych.
- size
- Int32
Liczba bajtów do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffer
to null
.
offset
wartość jest mniejsza niż 0.
-lub-
offset
jest większa niż długość obiektu buffer
.
-lub-
size
wartość jest mniejsza niż 0.
-lub-
size
jest większa niż długość buffer
minus wartości parametru offset
.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Wystąpił błąd systemu operacyjnego podczas uzyskiwania dostępu do elementu Socket.
Została zamknięta Socket .
Przykłady
Poniższy przykład kodu określa bufor danych, przesunięcie, rozmiar i SocketFlags wysyłanie danych do połączonego elementu Socket.
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
int SendReceiveTest4( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int byteCount = server->Send( msg, 0, msg->Length, SocketFlags::None );
Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
// Get reply from the server.
byteCount = server->Receive( bytes, 0, server->Available,
SocketFlags::None );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return (e->ErrorCode);
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, offset, message size, and socket flags.
public static int SendReceiveTest4(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int byteCount = server.Send(msg, 0, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", byteCount);
// Get reply from the server.
byteCount = server.Receive(bytes, 0, bytes.Length, SocketFlags.None);
if (byteCount > 0)
Console.WriteLine(Encoding.UTF8.GetString(bytes, 0, byteCount));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, offset, message size, and socket flags.
Public Shared Function SendReceiveTest4(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim byteCount As Integer = server.Send(msg, 0, msg.Length, SocketFlags.None)
Console.WriteLine("Sent {0} bytes.", byteCount)
' Get reply from the server.
byteCount = server.Receive(bytes, 0, server.Available, SocketFlags.None)
If byteCount > 0 Then
Console.WriteLine(Encoding.UTF8.GetString(bytes))
End If
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest4
Uwagi
Send synchronicznie wysyła dane do hosta zdalnego określonego w Connect metodzie or Accept i zwraca liczbę bajtów pomyślnie wysłanych. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
W tym przeciążeniu, jeśli określisz flagę DontRoutesocketflags
jako parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać metodę przed wywołaniem Connect tej metody lub Send zgłosi błąd SocketException. Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć polecenia Connect , aby nawiązać połączenie hosta zdalnego lub użyć go Accept do akceptowania połączenia przychodzącego.
Jeśli używasz protokołu bez połączenia i planujesz wysyłanie danych do kilku różnych hostów, należy użyć polecenia SendTo. Jeśli nie używasz SendTometody , musisz wywołać wywołanie przed każdym wywołaniem Connect metody Send. Jest w porządku, aby użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego z .Connect Można również zmienić domyślny host zdalny przed wywołaniem przez Send wykonanie innego wywołania do Connect.
Należy również upewnić się, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd SocketException.
Jeśli używasz protokołu zorientowanego na połączenie, Send zablokuje do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli przekroczono limit czasu, Send wywołanie zwróci wartość SocketException. W trybie odblokowywania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba żądanych bajtów. Aplikacja musi śledzić liczbę wysłanych bajtów i ponowić próbę wykonania operacji, dopóki aplikacja nie wyśle żądanej liczby bajtów. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
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.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
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ż
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(Byte[], Int32, SocketFlags)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła określoną liczbę bajtów danych do połączonego Socketobiektu przy użyciu określonego SocketFlagselementu .
public:
int Send(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags);
public int Send (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * int * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), size As Integer, socketFlags As SocketFlags) As Integer
Parametry
- size
- Int32
Liczba bajtów do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffer
to null
.
size
wartość jest mniejsza niż 0 lub przekracza rozmiar buforu.
socketFlags
nie jest prawidłową kombinacją wartości.
-lub-
Podczas uzyskiwania dostępu do gniazda występuje błąd systemu operacyjnego.
Element Socket został zamknięty.
Przykłady
Poniższy przykład kodu wysyła dane znalezione w buforze i określa None wartość .SocketFlags
// Displays sending with a connected socket
// using the overload that takes a buffer, message size, and socket flags.
int SendReceiveTest3( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int i = server->Send( msg, msg->Length, SocketFlags::None );
Console::WriteLine( "Sent {0} bytes.", i.ToString() );
// Get reply from the server.
int byteCount = server->Receive( bytes, server->Available,
SocketFlags::None );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return (e->ErrorCode);
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer, message size, and socket flags.
public static int SendReceiveTest3(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int i = server.Send(msg, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", i);
// Get reply from the server.
int byteCount = server.Receive(bytes, bytes.Length, SocketFlags.None);
if (byteCount > 0)
Console.WriteLine(Encoding.UTF8.GetString(bytes, 0, byteCount));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer, message size, and socket flags.
Public Shared Function SendReceiveTest3(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim i As Integer = server.Send(msg, msg.Length, SocketFlags.None)
Console.WriteLine("Sent {0} bytes.", i)
' Get reply from the server.
Dim byteCount As Integer = server.Receive(bytes, server.Available, SocketFlags.None)
If byteCount > 0 Then
Console.WriteLine(Encoding.UTF8.GetString(bytes))
End If
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest3
Uwagi
Send Synchronicznie wysyła dane do hosta zdalnego ustanowionego w metodzie Connect or Accept i zwraca liczbę bajtów, które zostały pomyślnie wysłane. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać, liczbę bajtów, które chcesz wysłać, oraz bitową kombinację dowolnego SocketFlagselementu . Jeśli określisz flagę DontRoute jako socketflags
parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody lub Send zgłosi SocketExceptionbłąd . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby ustanowić połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu bez połączenia i planujesz wysyłać dane do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać metodę Connect przed każdym wywołaniem Send metody . Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Możesz również zmienić domyślnego hosta zdalnego przed wywołaniem metody Send , wykonując kolejne wywołanie metody Connect.
Protokół zorientowany na Send połączenie będzie blokowany do momentu wysłania żądanej liczby bajtów, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli wartość limitu czasu została przekroczona, Send wywołanie zwróci SocketExceptionwartość . W trybie bezblokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba bajtów, które żądasz. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponawianie próby wykonania operacji do momentu wysłania żądanej liczby bajtów przez aplikację. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
Należy się upewnić, że rozmiar nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak, datagram nie zostanie wysłany i Send 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.
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.
Ważne
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
Zobacz też
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(IList<ArraySegment<Byte>>)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła zestaw buforów na liście do połączonego Socketelementu .
public:
int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers);
public int Send (System.Collections.Generic.IList<ArraySegment<byte>> buffers);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte))) As Integer
Parametry
- buffers
- IList<ArraySegment<Byte>>
Lista typówArraySegment<T>Byte, które zawierają dane do wysłania.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffers
to null
.
buffers
jest pusta.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda. Zobacz sekcję uwagi poniżej.
Element Socket został zamknięty.
Uwagi
Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody lub Send zgłosi SocketExceptionbłąd . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby nawiązać połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu bez połączenia i planujesz wysyłać dane do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać Connect metodę przed każdym wywołaniem metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślnego hosta zdalnego przed wywołaniemSend, wykonując inne wywołanie do .Connect
Jeśli używasz protokołu zorientowanego na połączenie, Send będzie blokować do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli wartość limitu czasu została przekroczona, Send wywołanie zwróci SocketExceptionwartość . W trybie bezblokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba bajtów w buforze. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponowienie próby wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
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.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
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
Send(IList<ArraySegment<Byte>>, SocketFlags)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła zestaw buforów na liście do połączonego Socketobiektu przy użyciu określonego SocketFlagselementu .
public:
int Send(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags);
public int Send (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags) As Integer
Parametry
- buffers
- IList<ArraySegment<Byte>>
Lista typówArraySegment<T>Byte, które zawierają dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffers
to null
.
buffers
jest pusta.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Uwagi
To przeciążenie wymaga co najmniej jednego buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0. Jeśli określisz flagę DontRoute jako socketFlags
parametr, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody lub Send zgłosi SocketExceptionbłąd . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby nawiązać połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu bez połączenia i planujesz wysyłać dane do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać Connect metodę przed każdym wywołaniem metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślnego hosta zdalnego przed wywołaniemSend, wykonując inne wywołanie do .Connect
Jeśli używasz protokołu zorientowanego na połączenie, Send będzie blokować do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli wartość limitu czasu została przekroczona, Send wywołanie zwróci SocketExceptionwartość . W trybie nieblokacyjnym może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczbę bajtów w buforze. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponowienie próby wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
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.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
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
Send(Byte[], SocketFlags)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .
public:
int Send(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Send (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : byte[] * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As Byte(), socketFlags As SocketFlags) As Integer
Parametry
- socketFlags
- SocketFlags
Bitowa kombinacja SocketFlags wartości.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffer
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Przykłady
W poniższym przykładzie kodu pokazano wysyłanie danych na połączonym Socketobiekcie .
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
int SendReceiveTest2( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int byteCount = server->Send( msg, SocketFlags::None );
Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
// Get reply from the server.
byteCount = server->Receive( bytes, SocketFlags::None );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return (e->ErrorCode);
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer and socket flags.
public static int SendReceiveTest2(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int byteCount = server.Send(msg, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", byteCount);
// Get reply from the server.
byteCount = server.Receive(bytes, SocketFlags.None);
if (byteCount > 0)
Console.WriteLine(Encoding.UTF8.GetString(bytes));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer and socket flags.
Public Shared Function SendReceiveTest2(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim byteCount As Integer = server.Send(msg, SocketFlags.None)
Console.WriteLine("Sent {0} bytes.", byteCount)
' Get reply from the server.
byteCount = server.Receive(bytes, SocketFlags.None)
If byteCount > 0 Then
Console.WriteLine(Encoding.UTF8.GetString(bytes))
End If
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest2
Uwagi
Send Synchronicznie wysyła dane do hosta zdalnego ustanowionego w metodzie Connect or Accept i zwraca liczbę bajtów, które zostały pomyślnie wysłane. Metoda Send może być używana zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać, i bitową kombinację .SocketFlags Przesunięcie buforu domyślnie wynosi 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu. Jeśli określisz flagę jako wartość parametru DontRoutesocketflags
, wysyłane dane nie będą kierowane.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody lub Send zgłosi SocketExceptionbłąd . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby nawiązać połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu bez połączenia i planujesz wysyłać dane do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać metodę Connect przed każdym wywołaniem metody .Send Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślnego hosta zdalnego przed wywołaniemSend, wykonując inne wywołanie do .Connect
Jeśli używasz protokołu zorientowanego na połączenie, Send będzie blokować do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli wartość limitu czasu została przekroczona, Send wywołanie zwróci SocketExceptionwartość . W trybie bezblokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba bajtów w buforze. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponawianie próby wykonania operacji do momentu wysłania żądanej liczby bajtów przez aplikację. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
Należy się upewnić, że rozmiar buforu nie przekracza maksymalnego rozmiaru pakietu bazowego dostawcy usług. Jeśli tak się stanie, datagram nie zostanie wysłany i Send zgłosi błąd 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.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
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ż
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(ReadOnlySpan<Byte>, SocketFlags)
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do połączonego Socket przy użyciu określonego SocketFlagselementu .
public:
int Send(ReadOnlySpan<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags);
public int Send (ReadOnlySpan<byte> buffer, System.Net.Sockets.SocketFlags socketFlags);
member this.Send : ReadOnlySpan<byte> * System.Net.Sockets.SocketFlags -> int
Public Function Send (buffer As ReadOnlySpan(Of Byte), socketFlags As SocketFlags) As Integer
Parametry
- buffer
- ReadOnlySpan<Byte>
Zakres bajtów, który zawiera dane do wysłania.
- socketFlags
- SocketFlags
Bitowa kombinacja wartości wyliczenia, która określa zachowania wysyłania i odbierania.
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Zobacz też
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)
Dotyczy
Send(Byte[])
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
- Źródło:
- Socket.cs
Wysyła dane do połączonego Socketpliku .
public:
int Send(cli::array <System::Byte> ^ buffer);
public int Send (byte[] buffer);
member this.Send : byte[] -> int
Public Function Send (buffer As Byte()) As Integer
Parametry
Zwraca
Liczba bajtów wysłanych do obiektu Socket.
Wyjątki
buffer
to null
.
Wystąpił błąd podczas próby uzyskania dostępu do gniazda.
Element Socket został zamknięty.
Przykłady
W poniższym przykładzie kodu pokazano wysyłanie danych na połączonym Socketobiekcie .
// Displays sending with a connected socket
// using the overload that takes a buffer.
int SendReceiveTest1( Socket^ server )
{
array<Byte>^ msg = Encoding::UTF8->GetBytes( "This is a test" );
array<Byte>^ bytes = gcnew array<Byte>(256);
try
{
// Blocks until send returns.
int byteCount = server->Send( msg );
Console::WriteLine( "Sent {0} bytes.", byteCount.ToString() );
// Get reply from the server.
byteCount = server->Receive( bytes );
if ( byteCount > 0 )
{
Console::WriteLine( Encoding::UTF8->GetString( bytes ) );
}
}
catch ( SocketException^ e )
{
Console::WriteLine( "{0} Error code: {1}.", e->Message, e->ErrorCode.ToString() );
return ( e->ErrorCode );
}
return 0;
}
// Displays sending with a connected socket
// using the overload that takes a buffer.
public static int SendReceiveTest1(Socket server)
{
byte[] msg = Encoding.UTF8.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
int i = server.Send(msg);
Console.WriteLine("Sent {0} bytes.", i);
// Get reply from the server.
i = server.Receive(bytes);
Console.WriteLine(Encoding.UTF8.GetString(bytes));
}
catch (SocketException e)
{
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
return (e.ErrorCode);
}
return 0;
}
' Displays sending with a connected socket
' using the overload that takes a buffer.
Public Shared Function SendReceiveTest1(ByVal server As Socket) As Integer
Dim msg As Byte() = Encoding.UTF8.GetBytes("This is a test")
Dim bytes(255) As Byte
Try
' Blocks until send returns.
Dim i As Integer = server.Send(msg)
Console.WriteLine("Sent {0} bytes.", i)
' Get reply from the server.
i = server.Receive(bytes)
Console.WriteLine(Encoding.UTF8.GetString(bytes))
Catch e As SocketException
Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode)
Return e.ErrorCode
End Try
Return 0
End Function 'SendReceiveTest1
Uwagi
Send Synchronicznie wysyła dane do hosta zdalnego określonego Connect w metodzie or Accept i zwraca liczbę bajtów, które zostały pomyślnie wysłane. Send można używać zarówno dla protokołów zorientowanych na połączenia, jak i bez połączenia.
To przeciążenie wymaga buforu zawierającego dane, które chcesz wysłać. Wartość domyślna SocketFlags to 0, przesunięcie buforu domyślnie wynosi 0, a liczba bajtów do wysłania wartości domyślnych do rozmiaru buforu.
Jeśli używasz protokołu bez połączenia, musisz wywołać Connect metodę przed wywołaniem tej metody lub Send zgłosi SocketExceptionbłąd . Jeśli używasz protokołu zorientowanego na połączenie, musisz użyć Connect polecenia , aby nawiązać połączenie hosta zdalnego, lub użyć polecenia Accept , aby zaakceptować połączenie przychodzące.
Jeśli używasz protokołu bez połączenia i planujesz wysyłać dane do kilku różnych hostów, należy użyć SendTo metody . Jeśli nie używasz SendTo metody , musisz wywołać Connect metodę przed każdym wywołaniem metody Send. Można użyć SendTo nawet po ustanowieniu domyślnego hosta zdalnego za pomocą polecenia Connect. Można również zmienić domyślnego hosta zdalnego przed wywołaniemSend, wykonując inne wywołanie do .Connect
Jeśli używasz protokołu zorientowanego na połączenie, Send będzie blokować do momentu wysłania wszystkich bajtów w buforze, chyba że limit czasu został ustawiony przy użyciu polecenia Socket.SendTimeout. Jeśli wartość limitu czasu została przekroczona, Send wywołanie zwróci SocketExceptionwartość . W trybie bezblokowania może zakończyć się pomyślnie, Send nawet jeśli wysyła mniej niż liczba bajtów w buforze. Aplikacja jest odpowiedzialna za śledzenie liczby wysłanych bajtów i ponowienie próby wykonania operacji, dopóki aplikacja nie wyśle bajtów w buforze. Nie ma również gwarancji, że wysyłane dane zostaną natychmiast wyświetlone w sieci. Aby zwiększyć wydajność sieci, podstawowy system może opóźnić transmisję do momentu zebrania znacznej ilości wychodzących danych. Pomyślne ukończenie Send metody oznacza, że podstawowy system miał miejsce do buforowania danych dla wysyłania sieciowego.
Uwaga
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.
Uwaga
Pomyślne ukończenie wysyłania nie wskazuje, że dane zostały pomyślnie dostarczone. Jeśli w systemie transportu nie ma dostępnego miejsca buforowego do przechowywania przesyłanych danych, wyślij blok, chyba że gniazdo zostało umieszczone w trybie bezblokowania.
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ż
- Connect(EndPoint)
- SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint)
- SocketFlags
- SetSocketOption(SocketOptionLevel, SocketOptionName, Int32)