如何使用winsock的send()函数发送宽字符?

2024-01-05

It says here http://msdn.microsoft.com/en-us/library/ms740149%28VS.85%29.aspx发送函数需要 const char*。

如何发送宽字符?我尝试了以下方法:

void MyClass::socksend(const wchar_t* wbuffer) {
   int i;
   char *buffer = (char *)malloc( MB_CUR_MAX );
   wctomb_s(&i,buffer, MB_CUR_MAX, (wchar_t)wbuffer);
   int buflen = strlen(buffer) + 2;
   char sendbuf[DEFAULT_BUFLEN];
   strcpy_s(sendbuf,buflen,buffer);
   sendbuf[buflen - 1] = '\n';
   int senderror = send(this->m_socket, sendbuf, buflen, 0);
   // error handling, etc goes here...

}

这并没有达到我的预期。它似乎没有向套接字发送任何内容。我该如何解决?


首先什么是宽字符?它是一个比8位更宽的整数值;这意味着您必须处理字节顺序。您需要将宽字符数组编码为字符数组,然后将其作为字符数组发送。在接收端,需要将字符数组解码为宽字符数组。

函数 wctomb_s 仅编码单个宽字符 to 字符数组。您要编码的函数宽字符数组 to 字符数组是 wcstombs_s。相应地,解码使用mbstowcs_s。

省略错误处理(未经测试):

void MyClass::socksend(const wchar_t* wbuffer) { 
   // determine the required buffer size
   size_t buffer_size;
   wcstombs_s(&buffer_size, NULL, 0, wbuffer, _TRUNCATE);

   // do the actual conversion
   char *buffer = (char*) malloc(buffer_size);
   wcstombs_s(&buffer_size, buffer, buffer_size, wbuffer, _TRUNCATE);

   // send the data
   size_t buffer_sent = 0;
   while (buffer_sent < buffer_size) {
       int sent_size = send(this->m_socket, buffer+buffer_sent, buffer_size-buffer_sent, 0);
       buffer_sent += sent_size;
   }

   // cleanup
   free(buffer);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用winsock的send()函数发送宽字符? 的相关文章

随机推荐

  • 使用react-pdf和react-chartjs-2生成pdf

    我环顾四周 但似乎找不到任何一起使用这两个库的示例 我的项目当前使用react pdf 生成pdf 报告 但我需要将chartjs 图表添加到我们将生成的一些新文件中 我不想使用两个不同的 pdf 库 也不必重新编码应用程序的某些部分以匹配
  • 在 Ubuntu 12.04 上完全删除并全新安装 python

    承认这一点很尴尬 但我只是继续努力在 Ubuntu 安装上设置我的 Python 环境 有时我让它工作得很好 但问题是 我觉得每当我坐下来对 python 项目进行一些业余爱好时 我最终都会花费几个小时来解决与我的 python 安装不一致
  • c# .NET CORE 使用 ITextSharp 将透明图像添加到现有 PDF

    我的目标是在现有 pdf 的每一页上添加公司徽标 不是水印 由于 pdf 文件和徽标的具体情况 我只能将徽标放置在 pdf 内容的顶部 而不是下面 并且徽标必须支持透明度 还有一个限制是我必须使用 NET Core 发布此内容并给出答案 因
  • Excel 中的错误消息

    在将 Excel ApplicationClass 的 DisplayAlerts 属性设置为 false 时 我遇到了以下错误的紧急问题 var excel new Excel Application excel DisplayAlert
  • Silverlight图像编辑器控件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 您是否知道任何 Silverlight 图像编辑器 控件 商业或开源 主要功能要求 裁剪 调整大小 旋转图像 设置背景颜色 插入文字 插入
  • 如何在 Java 中查找 2D 数组中的子数组是否具有特定的和?

    我试图通过比较源图像和图案图像中存在的像素的平均颜色来解决图像匹配问题 我已将这个问题简化为子数组求和问题 但无法找到解决方法 假设我有一个包含所有正整数的二维数组 ARR 我有一个数字 x 它是小图案图像中存在的像素颜色的平均值 我只需要
  • iPhone - 从另一个视图控制器调用函数

    我有一个名为 sendDataToMotor 的函数 它在我的第一个视图控制器类中 我有另一个名为 SecondViewController 的视图控制器 我需要从 Second View Controller m 类调用此函数 我尝试申报
  • haproxy 全局 maxconn 和服务器 maxconn 的区别

    我对我的 haproxy 配置有疑问 Global settings global log 127 0 0 1 syslog emerg maxconn 4000 quiet user haproxy group haproxy daemo
  • 如何测量并显示单个测试的运行时间?

    我有一个可能需要长时间运行的测试分级测试 test a long running test failAfter Span 60 Seconds 即使测试在超时限制内完成 其运行时间对于运行测试的人来说也是有价值的 我如何测量并显示这个的运行
  • 将 WriteableBitmap 保存为 PNG

    如何将 WriteableBitmap 保存为具有透明背景的 PNG PNG 和带有透明度的 PNG 有区别吗 感谢你的帮助 请给我看示例代码 谢谢 只需浏览以下链接即可 希望这可以帮助你 使用 WPF 将 WriteableBitmap
  • 我如何获得有关谁调用了某个方法的信息?

    我想获得一些有关谁调用了特定方法的信息 也就是说 如果可能的话 获取进行调用的方法的行号和文件名 类似于FILE and LINE 除了堆栈中的下一层 这在高级语言中是可能的 但是在 Objective C 中有什么方法可以做到这一点吗 v
  • 如何调试 Grunt Mocha 任务?

    我正在使用 WebStorm 来运行 grunt 任务 调试器成功停止在 Gruntfile js 文件中的断点处 但不在我的任务文件中 在 Gruntfile js 中 我注册了一个如下任务 grunt initConfig config
  • 错误消息“ENOENT,没有这样的文件或目录”

    我从 Node js 应用程序中收到此错误 ENOENT 没有这样的文件或目录 Desktop MyApp newversion partials navigation jade 我知道该文件在那里 因为当我尝试使用精确复制和粘贴的路径打开
  • jQuery UI 选项卡 - 深度链接到选项卡内容

    我不确定目前这是否可能 而且我所做的测试似乎提供了奇怪的结果 我在一页上有 4 个选项卡 这些选项卡内有几个文本部分 每个部分都有一个唯一的锚点名称 我想做的是从另一个页面链接到选项卡 3 中的第四个内容块 这些选项卡都工作得很好 如果我链
  • 将参数传递给 Go IIFE(以下 javascript 示例)

    我习惯于在 javascript 中进行编程 我可以执行以下操作将参数传递到立即调用的函数表达式中 function twoSeconds do something with twoSeconds here 2 1000 所以我希望能够在
  • PostgreSQL - 从函数返回 n 大小的 varchar

    正如我在文档中发现的 带括号的类型修饰符 例如 类型的精度字段 numeric 被 CREATE FUNCTION 丢弃 是否有其他方法可以从 plpgsql 函数返回 varchar N 类型 问题更新 在图片上 您可以看到 Name 列
  • 为什么不能使用 cat 逐行读取文件,其中每行都有分隔符

    我有一个文本文件 其中包含如下内容 abc 123 comma the quick brown fox jumped over the lazy dog comma comma 我写了一个脚本 for i in cat file do ec
  • 通过 Android 应用程序连接到 WiFi

    我希望创建一个应用程序 检测附近可用的 wifi 连接 然后连接到它们 到目前为止 我所做的是创建一个 ListView 列出可用的 wifi 连接 然后创建一个 LongItemClick 对话框 显示网络的 SSID 和 BSSID 并
  • 无法在 C# 中反序列化 JSON 结果。输入字符串格式错误

    我正在尝试将 json 输出反序列化为 C 对象 JSON 结果 order commission 3 490000 cost 4 490000 duration day extended hours false fees 0 000000
  • 如何使用winsock的send()函数发送宽字符?

    It says here http msdn microsoft com en us library ms740149 28VS 85 29 aspx发送函数需要 const char 如何发送宽字符 我尝试了以下方法 void MyCla