解决方案 »

  1.   

    http://www.cnblogs.com/starxp/articles/2528727.html
      

  2.   

    客户端可以使用UDP协议,只需要将类的对象发送到指定的端口即可。原先用C++编程时,将对象的地址强制转换就行了,使用sendto(sockClient,(char*)(&ClassObject),length,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));,其中ClassObject为类的对象,但C#中需要使用send(byte[],length,ipendpoint)格式,只能发送byte[]类型,似乎没有从对象到byte[]的转换。若进行序列化后发送客户端很可能不识别。
      

  3.   

    不知道你说的数据结构是指什么,要发送的类的属性、方法是已知的(原先的C++头文件中可查),原先使用C++发送过去可以成功,现在只是要用C#重新编写一下,但找不到类和byte[]转换的方法
      

  4.   

    发送的时候用 Google Protocol Buffer  把类做一次二进制序列化
    收到数据之后用 Google Protocol Buffer  做反序列化
      

  5.   

    商定好socket包的格式,头,尾,校验和等。。
      

  6.   

    我觉得你不应该一开始就纠结如何把C#类对象以UDP发送
    你试试把C#的类对象传给C++编写的DLL,它能认识?
    如果两种语言的类对象互相根本不能传递,就算你想到办法把C#类发送了,又有什么用?
      

  7.   

    试试把类包装成json然后再发送
      

  8.   

    试了不少方法都没用,其实主要的就是将以下的C++代码用C#改写,sendto(sockClient,(char*)(&ClassObject),length,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));,其中ClassObject是类对象
      

  9.   


    单纯使用.net是无法实现的,这个C++代码是获取对象所在内存地址的字节序然后发送。在.net托管代码中你无法实现这点。靠谱的做法是使用VC混合编程,将你要发送的对象类及发送对象的方法封装到vc clr dll中,再在你的C#程序引用此dll,使用此dll中的类和方法即可。
      

  10.   


    晕。把多个(不同类型的)数据连续写入一个 byte[] 或者 MemoryStream,这是小菜一碟。关键是你要列出每一个字段的占位规范。列不出来,只能瞎碰。
      

  11.   


    单纯使用.net是无法实现的,这个C++代码是获取对象所在内存地址的字节序然后发送。在.net托管代码中你无法实现这点。靠谱的做法是使用VC混合编程,将你要发送的对象类及发送对象的方法封装到vc clr dll中,再在你的C#程序引用此dll,使用此dll中的类和方法即可。VC开发时很少在VC中观察和调试“内存地址的字节序列”?这个“字节序列”序列,用别的编程语言都可以产生。不是只有VC!
      

  12.   

    请问楼上说的“占位规范”是指每个数据在内存中的位置和大小吗?在原先的C++代码中,类的定义中只是指明了各属性的类型,并未规定其次序,直接用上述语句发送,客户端即可接收,在C#中需要指明各属性的次序吗?另外,请问在C#中是否各属性需要转换成网络字节序再发送?