求高手, socket通讯, 从非托管区发送内容到Soket

okkk 2015-09-14 08:58:22
在非托管区【共享内存】里面有一堆数据,可以拿到数据的byte* 或 IntPtr,长度也可以确定,需要通过socket发送到网络

现在.net提供的API只能把非托管区的数据复制到一个byte[]的 缓冲区,然后再发送到Socket.

这个缓冲区的复制操作完全没有必要,有没有高手可以让 非托管区的内容直接发送到Socket,避免复制操作。
...全文
282 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
okkk 2015-10-15
  • 打赏
  • 举报
回复
引用 楼主 okkk 的回复:
在非托管区【共享内存】里面有一堆数据,可以拿到数据的byte* 或 IntPtr,长度也可以确定,需要通过socket发送到网络 现在.net提供的API只能把非托管区的数据复制到一个byte[]的 缓冲区,然后再发送到Socket. 这个缓冲区的复制操作完全没有必要,有没有高手可以让 非托管区的内容直接发送到Socket,避免复制操作。
也没有时间去挖 .net的内部封装, 暂时考虑为这个办法了,可惜只能考虑不能尝试,我不能把已有的代码给丢掉吧
bdmh 2015-09-14
  • 打赏
  • 举报
回复
这个跟托管不托管没关系,你只管把你的byte流发过去,告诉对方数据结构,对方就会定义相对应的结构去把你的流数据转为托管的对象使用
okkk 2015-09-14
  • 打赏
  • 举报
回复
是在服务器端哈, Socket已经创建好了, 问题是C#的Socket连handle都拿不到
_lee_chong 2015-09-14
  • 打赏
  • 举报
回复
既然你共享内存是非托管的,那你socket也用winSocket 的api不就行了
okkk 2015-09-14
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
这个跟托管不托管没关系,你只管把你的byte流发过去,告诉对方数据结构,对方就会定义相对应的结构去把你的流数据转为托管的对象使用
版主大人来了,欢迎。 现在的问题是 在托管环境拿不到Socket的句柄。 而非托管环境的 byte* 不能当做byte[]来使用。编译器不认

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧