CAsyncSocket::SendTo

Rufen Sie die Memberfunktion auf, um Daten zu einem bestimmten Ziel zu senden.

int SendTo(
   const void* lpBuf,
   int nBufLen,
   UINT nHostPort,
   LPCTSTR lpszHostAddress = NULL,
   int nFlags = 0 
);
int SendTo(
   const void* lpBuf,
   int nBufLen,
   const SOCKADDR* lpSockAddr,
   int nSockAddrLen,
   int nFlags = 0 
);

Parameter

  • lpBuf
    Ein Puffer, der der zu sendenden Daten enthält.

  • nBufLen
    Die Länge der Daten in lpBuf in Bytes.

  • nHostPort
    Der Port, der die Socket-Anwendung identifiziert.

  • lpszHostAddress
    Die Netzwerkadresse des Sockets, mit dem dieses Objekt verbunden ist: ein Computer Name wie "ftp.microsoft.com," oder ein durch Punkte getrennte Zahl wie "128.56.22.8".

  • nFlags
    Gibt die Methode an, in der der Aufruf ausgeführt wird.Die Semantik dieser Funktion wird mit der Socketoptionen und den nFlags-Parameter bestimmt.Der zweite Vorgang wird erstellt, indem Sie eine der folgenden Werte mit dem Operator C++ OR kombiniert:

    • MSG_DONTROUTE gibt an, dass die Daten nicht für Routing sein sollten.Ein Windows Socket-Lieferant kann auswählen, um dieses Flag zu ignorieren.

    • MSG_OOB senden Out-of-Band-Daten (nur SOCK_STREAM ).

  • lpSockAddr
    Ein Zeiger auf eine SOCKADDR-Struktur, die die Adresse des Zielsockets enthält.

  • nSockAddrLen
    Die Länge der Adresse in lpSockAddr in Bytes.

Rückgabewert

Wenn kein Fehler auftritt, gibt SendTo die Gesamtzahl der gesendeten Zeichen zurück.(Beachten Sie, dass dieses, kleiner als die Zahl sein kann angegeben durch nBufLen.) Andernfalls wird ein Wert von SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode kann abgerufen werden, indem Sie GetLastError aufruft.Die folgenden Fehler gelten für diese Memberfunktion zu:

  • Vor der Verwendung dieser APIs WSANOTINITIALISED einem erfolgreichen AfxSocketInit muss auftreten.

  • WSAENETDOWN, das die Windows Socket-Implementierung hat, dass das Netzwerksubsystem fehlgeschlagen ist.

  • WSAEACCES die angeforderte Adresse ist eine Broadcastadresse, aber das entsprechende Flag wurde nicht festgelegt.

  • Ist blockierenden Windows Socket-Vorgang WSAEINPROGRESS A ausgeführt.

  • WSAEFAULT die lpBuf oder lpSockAddr-Parameter sind nicht Teil des Benutzeradressbereichs, oder das lpSockAddr-Argument ist zu klein (kleiner als die Größe einer SOCKADDR-Struktur).

  • WSAEINVAL der Hostname ist ungültig.

  • WSAENETRESET die Verbindung muss zurückgesetzt werden, da die Windows Socket-Implementierung sie ablegte.

  • WSAENOBUFS die Windows Socket-Berichteüber die Ausführung ein Pufferdeadlock.

  • WSAENOTCONN der Socket wird nicht verbunden (nur SOCK_STREAM ).

  • WSAENOTSOCK der Deskriptor ist kein Socket.

  • WSAEOPNOTSUPP   MSG_OOB wurde angegeben, aber der Socket ist nicht vom Typ SOCK_STREAM.

  • WSAESHUTDOWN der Socket heruntergefahren wurde; Es ist nicht möglich, SendTo auf einem Socket aufzurufen, nachdem ShutDown mit nHow aufgerufen wurde, das auf 1 oder 2 gesetzt ist.

  • WSAEWOULDBLOCK der Socket wird nicht als blockiert markiert und der angeforderte Vorgang würde blockieren.

  • WSAEMSGSIZE der Socket ist vom Typ SOCK_DGRAM, und das Datagramm ist größer als die maximal zulässige, das von der Windows Socket-Implementierung unterstützt wird.

  • WSAECONNABORTED die virtuelle Verbindung wurde aufgrund des Timeouts oder anderen Fehlers abgebrochen.

  • WSAECONNRESET die virtuelle Verbindung wurde durch den Seite zurückgesetzt.

  • WSAEADDRNOTAVAIL die angegebene Adresse ist nicht vom lokalen Computer verfügbar.

  • WSAEAFNOSUPPORT Adressen in der angegebenen Kategorie können nicht mit diesem Socket verwendet werden.

  • Zieladresse WSAEDESTADDRREQ A ist erforderlich.

  • WSAENETUNREACH das Netzwerk kann nicht von diesem Host derzeit erreicht werden.

Hinweise

SendTo wird auf Datagramm oder Streamsockets verwendet und wird verwendet, um Verbindungen mit Daten auf einem Socket zu schreiben.Für Datagrammsockets muss daher darauf geachtet werden, um das Maximum IP-Paketgröße der zugrunde liegenden Subnetze nicht zu überschreiten, die durch das iMaxUdpDg-Element in der WSADATA-Struktur angegeben ist, die von AfxSocketInit ergänzt wird.Wenn die Daten zu lang sind, vom zugrunde liegenden Protokoll atomar zu übergeben, wird der Fehler WSAEMSGSIZE zurückgegeben, und es werden keine Daten gesendet.

Beachten Sie, dass der erfolgreichen Abschluss von SendTo nicht angibt, dass die Daten erfolgreich zugestellt wurden.

SendTo wird nur auf einem SOCK_DGRAM Socket verwendet, um ein Datagramm zu einem bestimmten Socket zu senden, der vom lpSockAddr-Parameter identifiziert wird.

Um eine Übertragung zu senden (nur auf SOCK_DGRAM ), sollte die Adresse im lpSockAddr-Parameter mit speziellen IP-Adresse INADDR_BROADCAST erstellt (definierten in Windows Socket-Headerdatei WINSOCK.H) zusammen mit der gewünschten Portnummer.Oder, wenn der lpszHostAddress-Parameter NULL ist, wird der Socket für die Übertragung konfiguriert.Es ist im Allgemeinen unratsam für ein Übertragungsdatagramm, die Größe zu überschreiten, an der Fragmentierung auftreten kann, die bedeutet, dass der Datenteil des Datagramms (ohne die Header) 512 Bytes nicht überschreiten darf.

Um Adressen IPv6 zu behandeln, verwenden Sie CAsyncSocket::SendToEx.

Anforderungen

Header: afxsock.h

Siehe auch

Referenz

CAsyncSocket-Klasse

Hierarchien-Diagramm

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send