CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

通过TCP传送结构体。(我已经可能正收发包含有string,int型的结构体了,可是如果结构体中包含int[]数组,就搞不定了。)

楼主roseguns(阿影)2004-10-18 13:57:24 在 .NET技术 / C# 提问

通过TCP传送结构体。(我已经可能正收发包含有string,int型的结构体了,可是如果结构体中包含int[]数组,就搞不定了。) 问题点数:33、回复次数:11Top

1 楼roseguns(阿影)回复于 2004-10-18 14:11:30 得分 0

UP一下,分数不够再加。Top

2 楼roseguns(阿影)回复于 2004-10-18 14:24:33 得分 0

通过TCP传送结构体,服务器端收不到结构体中的整型数组的值;  
  (我已经可能正收发包含有string,int型的结构体了,可是如果结构体中包含int[]数组,就搞不定了。)  
  ---------------------------------------------------------------------------------------------  
  〔相关背景资料:〕  
  客户端结构体与服务器端的结构体格式相同,定义如下:  
  [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]  
  public   struct   cc  
  {  
    public   int   account;  
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=10)]  
    public   string   passWord;  
    [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)]  
    public   int[]   number;  
  }  
   
  客户端在发送结构体前首先将结构体转换为byte[]数组,函数如下:  
  static   byte[]   StructToBytes(cc   structObj)  
  {  
   int   size=0;  
      try    
      {    
        size=Marshal.SizeOf(structObj);  
      }  
      catch   (Exception   ex)  
      {  
        string   rr=ex.Message;  
      }  
      IntPtr   buffer   =   Marshal.AllocHGlobal(size);  
      try  
      {  
        Marshal.StructureToPtr(structObj,   buffer,true);  
        byte[]   bytes   =   new   byte[size];  
        Marshal.Copy(buffer,   bytes,   0,   size);  
        return   bytes;  
      }  
      catch(Exception   ex)  
      {  
        string   rr=ex.Message;  
        return   null;  
      }  
      finally  
      {  
        Marshal.FreeHGlobal(buffer);  
      }  
  }  
   
  服务器端在收到客户端流后将流转换为结构体,函数如下:  
  public   cc   BytesToStruct(byte[]   bytes,   cc   c1)  
  {  
    int   size   =     Marshal.SizeOf(c1);  
    IntPtr   buffer   =   Marshal.AllocHGlobal(size);  
    try  
    {  
     Marshal.Copy(bytes,   0,   buffer,   size);  
     return   (cc)Marshal.PtrToStructure(buffer,   c1.GetType());  
    }  
    finally  
    {  
     Marshal.FreeHGlobal(buffer);  
    }  
  }  
   
  Top

3 楼BeginnerBBB()回复于 2004-10-18 14:33:05 得分 3

序列化与反序列化Top

4 楼roseguns(阿影)回复于 2004-10-18 14:57:07 得分 0

不好意思,有一个前提没有说:客户端是C#,服务器端是VC6,可以用序列化和反序列的概念吗?Top

5 楼roseguns(阿影)回复于 2004-10-19 11:25:48 得分 0

今天UP一下.Top

6 楼gbbword(分不清)回复于 2004-10-19 11:37:17 得分 3

可惜楼主说的不够详细,不然就可以多学习点了。顶一下!Top

7 楼gbbword(分不清)回复于 2004-10-19 11:41:10 得分 0

不知道系统认不认你这种在内存中与结构体一样的东西。很想知道。再顶一下!Top

8 楼roseguns(阿影)回复于 2004-10-19 12:16:12 得分 0

当然认了,我的例子中基本实现了这个功能,现在就是int[]数组不能正常收发与装配.  
  有关更详细的说明,大家请前往此页:  
  http://blog.csdn.net/roseguns/archive/2004/10/19/142408.aspxTop

9 楼programbin(终极猫咪)回复于 2004-11-03 10:00:31 得分 3

我觉的用   remoting   不是更好吗?Top

10 楼ET2004(外星人)回复于 2005-01-22 01:43:14 得分 24

to   programbin:  
  用   .NET   Remoting   还不如用   BinaryFormatter   来序列化和反序列化,.NET   Remoting   本身就是基于序列化和反序列化的。  
   
  只不过用序列化和反序列化会产生额外的数据,而且必须保证发送端和接收端都基于   .NET   平台(至少能支持序列化和反序列化)。  
   
  楼主的思路是很好的,也给了我很大的启发,因为我最近也碰到同样的问题,在这里顺便感谢一下楼主!^_^   如果能解决剩下的问题就比较完美了。  
  Top

11 楼mfkygazb(zb)回复于 2005-03-25 16:44:48 得分 0

upTop

相关问题

  • 怎样在窗体中添加构件数组?
  • 怎么把结构体中的数据复制到数组中
  • string数组的问题
  • BYTE数组和String转换
  • 如何在子窗体中修改父窗体中javascript的一个数组变量
  • 非托管结构体中定义固定大小的数组问题
  • 高手指教:有关数组在不同的窗体中传值问题
  • 挑战:通过构造函数给结构体中的数组传递参数
  • 自定义结构体中的数组怎么自定义声明
  • 怎样把jsp的String数组赋值给javascript数组

关键词

  • .net
  • 结构
  • 序列化
  • tcp
  • 数组
  • 结构体
  • structobj
  • 结构体中
  • marshal
  • 可能正收发

得分解答快速导航

  • 帖主:roseguns
  • BeginnerBBB
  • gbbword
  • programbin
  • ET2004

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo