服务器端是C#写的,客户端是VC写的,客户端把一个对象发送过来,如:
class A{
int a;
int b;}服务端如何接收并提取这个对象的a,b值呢?若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可,因为对C#不熟,不知C#应如何操作,所以请教下大家。。

解决方案 »

  1.   

    SoapFormatter或者BinaryFormatter object   serialize 
    然后通过socket
      

  2.   

    A a = new A();
    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(fs, a);
    弱弱地问下,fs是一个流对象,怎么获取socket的流?
      

  3.   

    [Quote=引用楼主 yang_jnu 的回复:]
    若是vc,直接新建一个对象,把收到的数据放到该对象的地址上即可如果要按照字节精确对照某一个c++环境的某一个业务版本,建议你让它去c++继续编程吧,不要用于.net项目中。一个项目,会考虑到在开发阶段其数据字段/属性定义可能随时修改类型,可能随时插入或者删除字段/属性,那么至少要考虑到这种适配要在一分钟内完成。
      

  4.   

    如果要按照字节精确对照某一个c++环境的某一个业务版本,建议你让它去c++继续编程吧,不要用于.net项目中。一个项目,会考虑到在开发阶段其数据字段/属性定义可能随时修改类型,可能随时插入或者删除字段/属性,那么至少要考虑到这种适配要在一分钟内完成。一个系统,服务端要考虑各种客户端,所以它比较规范。你们的公司不是有服务端嘛?!那么就不用讲什么vc,按照服务端的通讯规范来办!
      

  5.   


    socket 中传输的是字节数组,从流中读取字节数组 然后在发送就可以了。接受的时候再将接受到的字节数组写入流中 反序列化。
      

  6.   

    序列化与反序列化,
    流可以是由byte[]实化的MemoryStream
      

  7.   

    感谢指教,目前就是用这种方法,代码如下:
    //序列化
    public static byte[] ObjectToBytes(object obj)
    {
        using (MemoryStream ms = new MemoryStream())
         {
             IFormatter formatter = new BinaryFormatter();
             formatter.Serialize(ms, obj);
            return ms.GetBuffer();
         }
    }//反序列化
    public static object BytesToObject(byte[] Bytes)
    {
        using (MemoryStream ms = new MemoryStream(Bytes))
         {
             IFormatter formatter = new BinaryFormatter();
            return formatter.Deserialize(ms);
         }