(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Socket.Send-Methode (Byte[], Int32, SocketFlags)

Aktualisiert: November 2007

Sendet die angegebene Anzahl von Datenbytes an einen verbundenen Socket, wobei die angegebenen SocketFlags verwendet werden.

Namespace:  System.Net.Sockets
Assembly:  System (in System.dll)
public int Send(
	byte[] buffer,
	int size,
	SocketFlags socketFlags
)
public int Send(
	byte[] buffer,
	int size,
	SocketFlags socketFlags
)
public function Send(
	buffer : byte[], 
	size : int, 
	socketFlags : SocketFlags
) : int

Parameter

buffer
Typ: System.Byte[]
Ein Array vom Typ Byte, das die zu sendenden Daten enthält.
size
Typ: System.Int32
Die Anzahl der zu sendenden Bytes.
socketFlags
Typ: System.Net.Sockets.SocketFlags
Eine bitweise Kombination der SocketFlags-Werte.

Rückgabewert

Typ: System.Int32
Die Anzahl der an den Socket gesendeten Bytes.
AusnahmeBedingung
ArgumentNullException

buffer ist null.

ArgumentOutOfRangeException

size ist größer als 0 oder übersteigt die Puffergröße.

SocketException

socketFlags ist keine gültige Kombination von Werten.

– oder –

Beim Zugriff auf den Socket ist ein Fehler auf Betriebssystemebene aufgetreten. Weitere Informationen finden Sie im Abschnitt "Hinweise".

ObjectDisposedException

Der Socket wurde geschlossen.

Send sendet Daten synchron an den mit der Connect-Methode oder der Accept-Methode angegebenen Remotehost und gibt die Anzahl der erfolgreich gesendeten Bytes zurück. Send kann sowohl für verbindungsorientierte wie für verbindungslose Protokolle verwendet werden.

Bei dieser Überladung muss ein Puffer mit den zu sendenden Daten, die zu sendende Anzahl von Bytes und eine bitweise Kombination von SocketFlags vorhanden sein. Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die gesendeten Daten nicht weitergeleitet.

Wenn Sie ein verbindungsloses Protokoll verwenden, müssen Sie vor dem Aufruf dieser Methode Connect aufrufen. Andernfalls löst Send eine SocketException aus. Bei verbindungsorientierten Protokollen müssen Sie entweder eine Remotehostverbindung mit Connect einrichten oder eine eingehende Verbindung mit Accept annehmen.

Wenn Sie ein verbindungsloses Protokoll verwenden und Daten an mehrere verschiedene Hosts senden möchten, empfiehlt sich die Verwendung der SendTo-Methode. Wenn Sie die SendTo-Methode nicht verwenden, müssen Sie vor jedem Aufruf der Send-Methode die Connect-Methode aufrufen. Sie können SendTo auch dann noch verwenden, wenn Sie bereits mit Connect einen Standardremotehost eingerichtet haben. Sie können außerdem vor dem Aufruf von Send den Remotehost ändern, indem Sie Connect erneut aufrufen.

Bei einem verbindungsorientierten Protokoll wird Send blockiert, bis die angeforderte Anzahl von Bytes gesendet wurde, sofern mit Socket.SendTimeout kein Timeout festgelegt wurde. Wenn der Timeoutwert überschritten wurde, löst der Send-Aufruf eine SocketException aus. Im nicht blockierenden Modus kann Send auch erfolgreich beendet werden, wenn weniger als die angeforderten Bytes gesendet wurden. Dabei liegt es in der Zuständigkeit der Anwendung, die Anzahl der gesendeten Bytes nachzuverfolgen und den Vorgang zu wiederholen, bis die angeforderte Anzahl von Bytes von der Anwendung gesendet wurde. Es gibt außerdem keine Garantie dafür, dass die gesendeten Daten sofort im Netzwerk zur Verfügung stehen. Zum Erhöhen der Netzwerkleistung kann die Übertragung vom zugrunde liegenden System verzögert werden, bis eine gewisse Menge ausgehender Daten gesammelt wurde. Ein erfolgreicher Abschluss der Send-Methode bedeutet, dass das zugrunde liegende System über genügend Speicher zum Puffern der Daten für eine Netzwerkübertragung verfügt.

f3kd48xs.alert_note(de-de,VS.90).gifHinweis:

Sie müssen sicherstellen, dass die Größe nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters übersteigt. Andernfalls wird das Datagramm nicht gesendet, und Send löst eine SocketException aus. Wenn Sie eine SocketException erhalten, können Sie mit der SocketException.ErrorCode-Eigenschaft den spezifischen Fehlercode abrufen. Nachdem Sie diesen Code abgerufen haben, finden Sie in der Dokumentation der MSDN Library zu API-Fehlercodes unter Windows Sockets, Version 2, eine ausführliche Beschreibung des Fehlers.

f3kd48xs.alert_note(de-de,VS.90).gifHinweis:

Der erfolgreiche Abschluss eines Sendevorgangs bedeutet nicht, dass die Daten erfolgreich übermittelt wurden. Wenn im Transportsystem für die übertragenen Daten kein Speicher im Puffer verfügbar ist, wird der Sendevorgang blockiert, es sei denn, der Socket wurde in den nicht blockierenden Modus versetzt.

f3kd48xs.alert_note(de-de,VS.90).gifHinweis:

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing.

Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE:

Beim Senden von Daten der Länge 0 (null) mit dieser Methode werden die Folgen vom systeminternen Betriebssystem und nicht von .NET Compact Framework bestimmt.

Im folgenden Codebeispiel werden die im Puffer vorhandenen Daten gesendet, und für SocketFlags wird None angegeben.

// 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, 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);
        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)
{
    ubyte msg[] = Encoding.get_UTF8().GetBytes("This is a test");
    ubyte bytes[] = new ubyte[256];
    try {
        // Blocks until send returns.
        int i = server.Send(msg, msg.get_Length(), SocketFlags.None);
        Console.WriteLine("Sent {0} bytes.", (Int32)i);
        // Get reply from the server.
        server.Receive(bytes, server.get_Available(), SocketFlags.None);
        Console.WriteLine(Encoding.get_UTF8().GetString(bytes));
    }
    catch (SocketException e) {
        Console.WriteLine("{0} Error code: {1}.", e.get_Message(),
            (Int32)e.get_ErrorCode());
        return e.get_ErrorCode();
    }
    return 0;
} //SendReceiveTest3


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.