Обратите внимание, что я не уверен в правильном способе передачи широких строк символов через сокет, так что для этой части вы по своему усмотрению. Я знаю, что он был описан как довольно волосатый и запутанный. :)
Учитывая это, если другая сторона сокета ожидает строку wchar_t, вы можете использовать wcslen
, чтобы получить длину строки, на которую указывает wbuffer, что дает вам
int senderror = send( this->m_socket, (char *)wbuffer, wcslen( wbuffer ) * sizeof( wchar_t ), 0 );
Есть также несколько возможных ошибок в вашем коде.
Если вам нужно преобразовать строку wchar_t в многобайтовую, вы должны использовать wcstombs_s вместо wctomb_s. wctombs_s преобразует один символ за раз, в то время как wcstombs_s преобразует строку.
Если результирующая строка длиннее DEFAULT_BUFLEN
, вы в конечном итоге искалечите строку с помощью \ n и отбросите все данные, длина которых превышает DEFAULT_BUFLEN
.
send
не всегда отправляет весь буфер. Вам нужно перебрать вызов для отправки до тех пор, пока не будут отправлены все байты, или пока вы не достигнете некоторого ограничения во времени или попыток или терпения.
См. здесь для получения дополнительной информации.