Поделиться через


CAsyncSocket::SendTo

Эта функция-член вызывается отправлять данные в определенной цели.

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  
);

Параметры

  • lpBuf
    Буфер, содержащий данные для передачи.

  • nBufLen
    Длина данных в lpBuf в байтах.

  • nHostPort
    Порт, определяющие приложение сокета.

  • lpszHostAddress
    Сетевой адрес сокета, к которому этот объект подключения: имя компьютера в виде "ftp.microsoft.com" или предоставленный точки число как "128.56.22.8".

  • nFlags
    Определяет способ вызова. Семантика этой функции определяется параметрами сокета и параметром nFlags. Второй построен, объединяя любой после значений с оператором C++ OR:

    • MSG_DONTROUTE Указывает, что данные не должны подлеубежать маршрутизации. Поставщик Windows sockets может игнорировать данный пометить.

    • MSG_OOB Отправляет экстренные данные (SOCK_STREAM ).

  • lpSockAddr
    Указатель на структуру SOCKADDR, содержащая адрес сокета целевого объекта.

  • nSockAddrLen
    Длина адреса в lpSockAddr в байтах.

Возвращаемое значение

Если ошибка не возникает, то SendTo возвращает общее число отправленных символов. (Обратите внимание, что это число может быть меньше количества, показанный nBufLen). В противном случае - значение SOCKET_ERROR, и возвращается конкретный код ошибки может быть получить, вызвав GetLastError. Об ошибке применяемых к данному функции-члену.

  • WSANOTINITIALISED А успешное AfxSocketInit должно произойти перед использованием этого API.

  • Реализация Windows WSAENETDOWN sockets обнаружила, что подсистема сети.

  • Запрошенный WSAEACCES адрес широковещательной адрес, но соответствующий пометить не был установлен.

  • WSAEINPROGRESS А операция блокировки Windows sockets выполняется.

  • WSAEFAULT Параметры lpBuf или lpSockAddr не является частью адресного пространства пользователя или аргумент lpSockAddr слишком мал (меньше, чем размер структуры SOCKADDR ).

  • WSAEINVAL Имя узла недопустимо.

  • WSAENETRESET Необходимо сбросить соединение, поскольку реализация Windows sockets удалила его.

  • WSAENOBUFS отчеты о реализации Windows sockets взаимоблокировка буфера.

  • WSAENOTCONN Сокет не подключено (SOCK_STREAM ).

  • Не WSAENOTSOCK дескриптор сокета.

  • WSAEOPNOTSUPP   MSG_OOB указано, но сокет не является типом SOCK_STREAM.

  • WSAESHUTDOWN Сокет было деактивации; невозможно вызвать SendTo на сокете после вызова ShutDown с nHow устанавливается значение 1 или 2.

  • WSAEWOULDBLOCK Сокет помечены как nonblocking и запрошенная операция запретитьTfа мере.

  • WSAEMSGSIZE Сокет типа SOCK_DGRAM, а каналы датаграмм превышает максимум, поддерживаемый в реализации Windows sockets.

  • Виртуальный WSAECONNABORTED канал будет прервана из-за истечения времени ожидания или другой ошибки.

  • Виртуальный WSAECONNRESET канал был сброшено удаленной стороной.

  • WSAEADDRNOTAVAIL Указанный адрес недоступен из локального компьютера.

  • Адреса WSAEAFNOSUPPORT в указанном семействе нельзя использовать с этим гнездом.

  • Целевой адрес WSAEDESTADDRREQ а не требуется.

  • WSAENETUNREACH Сеть становится недоступной из основного приложения в данное время.

Заметки

SendTo используется на гнездах датаграммы или потока и используется для записи исходящие данные для сокета. Для сокетов датаграмм, необходимо соблюдать осторожность, превышения максимального размера пакета IP основных подсетей, который задается элементом iMaxUdpDg в структуре WSADATA заполнянной AfxSocketInit. Если данные, которые слишком длинны для передачи атомарным образом через базовый протокол, WSAEMSGSIZE возвращается ошибка и никакие данные не передаются.

Обратите внимание, что успешное завершение SendTo указывает, что данные были успешно доставлены.

SendTo используется только для сокета SOCK_DGRAM отправить датаграмма с определенным гнезду указанный параметром lpSockAddr.

Отправить широковещательной (на SOCK_DGRAM только) адреса в параметре lpSockAddr быть построено с помощью INADDR_BROADCAST специальный IP-адрес (указанный в файле заголовка WINSOCK.H Windows sockets) вместе с предназначенным номером порта. Если параметр lpszHostAddressNULL, сокет настроено для широковещательного. Обычно нецелесообразно для широковещательной датаграммы превышать размер, на котором фрагментация может произойти, которая подразумевает, что часть данных датаграмма (за исключением заголовков) не должна превышать 512 байт.

Чтобы обрабатывать адреса IP версии 6, используйте CAsyncSocket::SendToEx.

Требования

Header: afxsock.h

См. также

Ссылки

Класс CAsyncSocket

Диаграмма иерархии

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send