CAsyncSocket::SendTo
Chiamare la funzione membro per inviare i dati a una destinazione specifica.
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
);
Parametri
lpBuf
Un buffer che contiene i dati per trasmettere.nBufLen
Lunghezza dei dati in lpBuf in byte.nHostPort
La porta che identifica l'applicazione di socket.lpszHostAddress
L'indirizzo di rete di socket a cui è connesso: un nome del computer come "ftp.microsoft.com", o un numero tratteggiato come "128.56.22.8".nFlags
Specifica la modalità in cui la chiamata viene eseguita.La semantica di questa funzione viene determinata dalle opzioni di socket e dal parametro nFlags.L'ultimo viene costruito combinando uno dei seguenti valori con l'operatore C++ OR :MSG_DONTROUTE specifica che i dati non devono essere conforme al routing.Un fornitore di Windows Sockets possibile ignorare questo flag.
MSG_OOB invia i dati fuori bandaSOCK_STREAM (solo).
lpSockAddr
Un puntatore a una struttura SOCKADDR contenente l'indirizzo di socket di destinazione.nSockAddrLen
Lunghezza dell'indirizzo in lpSockAddr in byte.
Valore restituito
Se non si verificano errori, SendTo restituisce il numero totale di caratteri inviati.Notare che questo può essere meno che il valore indicato da nBufLen). In caso contrario, un valore SOCKET_ERROR viene restituito e un codice di errore specifico può essere recuperato chiamando GetLastError.Gli errori seguenti si applicano a questa funzione membro:
WSANOTINITIALISED Al AfxSocketInit deve verificarsi prima di utilizzare questa API.
WSAENETDOWN che l'implementazione di Windows Sockets ha rilevato che il sottosistema di rete non è riuscita.
WSAEACCES l'indirizzo è richiesto un indirizzo broadcast, ma il flag appropriato non è stato impostato.
WSAEINPROGRESS che blocca l'operazione di Windows Sockets è in corso.
WSAEFAULT i parametri lpSockAddr o lpBuf non fa parte dello spazio degli indirizzi dell'utente, o argomento lpSockAddr è troppo piccolo (minore della dimensione di una struttura SOCKADDR ).
WSAEINVAL il nome host non è valido.
WSAENETRESET la connessione deve essere reimpostato poiché l'implementazione di Windows Sockets è stata rilasciata.
WSAENOBUFS i rapporti di implementazione Windows Sockets un deadlock del buffer.
IlWSAENOTCONN socket non è connessoSOCK_STREAM (solo).
WSAENOTSOCK il descrittore non è un socket.
WSAEOPNOTSUPP MSG_OOB è stato specificato, ma il socket non è di tipo SOCK_STREAM.
IlWSAESHUTDOWN socket è stato interrotto; non è possibile chiamare SendTo su un socket dopo ShutDown è stato richiamato con nHow impostato su 1 o 2.
IlWSAEWOULDBLOCK socket è contrassegnato come non bloccante e l'operazione richiesta blocca.
IlWSAEMSGSIZE socket è di tipo SOCK_DGRAMe il datagram è superiore al massimo supportato dall'implementazione Windows Sockets.
IlWSAECONNABORTED circuito virtuale è stato interrotto a causa dell'intervallo o di altro tipo.
IlWSAECONNRESET circuito virtuale è stato reimpostato sul lato remoto.
WSAEADDRNOTAVAIL l'indirizzo specificato non è disponibile nel computer locale.
Gli indirizzi diWSAEAFNOSUPPORT la famiglia specificata non possono essere utilizzati con questo socket.
L'indirizzo di destinazione diWSAEDESTADDRREQ A è obbligatorio.
WSAENETUNREACH la rete non può essere raggiunto da questo host attualmente.
Note
SendTo viene utilizzato in datagram o su socket di flusso e viene utilizzato per scrivere i dati in uscita a un socket.Per i socket di datagramma, la visualizzazione deve essere effettuata per non superare la dimensione massima di pacchetto IP della subnet sottostanti, che venga fornita dall'elemento iMaxUdpDg nella struttura WSADATA compilata da AfxSocketInit.Se i dati sono troppo lunghi per passare atomico con il protocollo sottostante, l'errore WSAEMSGSIZE viene restituito e non vengono trasmesse.
Si noti che il completamento SendTo non indica che i dati correttamente sono stati resi.
SendTo viene utilizzato solo su un socket SOCK_DGRAM per inviare un datagram a un socket specifico identificato dal parametro lpSockAddr.
Per inviare una trasmissione su SOCK_DGRAM (solo), l'indirizzo nel parametro lpSockAddr deve essere costruito utilizzando l'indirizzo IP speciale INADDR_BROADCAST (definito nel file di intestazione Windows Sockets WINSOCK.H) insieme al numero di porta desiderato.In alternativa, se il parametro lpszHostAddress è NULL, il socket è configurato per la trasmissione.Per un datagram in genere è sconsigliabile superare la dimensione della frammentazione può verificarsi, che implica che la parte di dati datagram (a esclusione delle intestazioni) non deve superare i 512 byte.
Per gestire gli indirizzi IPv6, utilizzare CAsyncSocket::SendToEx.
Requisiti
Header: afxsock.h