服务器端是用C++开发的Windows应用程序,对方给开放了通讯包结构,具全的数据包定义
// 定义数据包头
typedef struct DataForm {
short int   PacketNo;
short int   PacketFlag;
short int   PacketLen;
short int SenderID;
short int ReceiverID;
unsigned char   Data[8192];
} DataForm;
//数据包
struct {
short int Command;
char CallerID[32];
short int Result;// 返回值:1 正确信息; 否则 错误信息. -1 跟踪量超出限定值 char Buffer[1024]; // 日志信息
} CallerTraceStruct;
我用C#做客户端,该如何处理这个数据包呀?请各位大虾帮帮忙呀!

解决方案 »

  1.   

    与C#没什么区别。直接用short int改为short
      

  2.   

    char CallerID[32];象这种字符数组在C#中的结构体内是不能指定长度的呀?!
      

  3.   

    应该很好弄啊,你应该得到是一个MemoryStream分析一下每个字段的位置
      

  4.   

    很感谢,我还想请教,数据包
    struct {
    short intCommand;
    charCallerID[32];
    short intResult
    charBuffer[1024];
    } CallerTraceStruct;
    与包头DataForm中的unsigned char   Data[8192];如何互相转换呀,
    还请各位大虾赐教!
      

  5.   

    看msdn,有各种数据类型定义。一个个找
      

  6.   

    还望大哥们多多帮忙呀!我在C#中定义了如下结构:
    private struct DataForm 
    {
    public short  PacketNo;
    public short PacketFlag;
    public short PacketLen;
    public short SenderID;
    public short ReceiverID;
    public short Command;
    public short Result;
    public char[] CallerID;//32
    public char[] Buffer; // 日志信息1024
    }
    初始化为:
    string caller = "12345678";
    DataForm data = new DataForm();
    data.CallerID = new char[32];
    data.Buffer = new char[1024]; data.PacketNo = CALLER_LOG_COMMAND;
    data.PacketFlag = 0;
    data.PacketLen = DATA_FORM_HEAD_LEN; //data.Command = BEGIN_TRACE_CALLER;
    data.Command = 7;
    data.CallerID = caller.ToCharArray();
    data.SenderID = 0;
    data.ReceiverID = 0;
    data.Result = 9;
    data.Buffer = caller.ToCharArray();
    int size = Marshal.SizeOf(data)+2;   
    byte[] bytes = new byte[size];   
    IntPtr buffer = Marshal.AllocHGlobal(size);   
    Marshal.StructureToPtr(structObj,buffer,true);
    Marshal.Copy(buffer,bytes,0,size);
    socket_udp.SendTo(bytes, bytes.Length, SocketFlags.None, serverpoint);
    在C++做的服务器中用定义包为
    typedef struct DataForm{
    short int  PacketNo;
    short int PacketFlag;
    short int PacketLen;
    short int SenderID;
    short int ReceiverID;
    short int Command;
    short int Result;
    char CallerID[32];//32
    char Buffer[1024]; // 日志信息1024
    }
    struct DataForm DataRecv; sprintf((char *)Messages,"CallerID:%s;Command:%d;Result:%d",DataRecv.CallerID,DataRecv.Command,DataRecv.Result);
    AfxMessageBox(Messages);
    这里打出来得字符字段CallerID的值为什么总是乱码,而所有的数字字段都没有问题
    各位老大帮帮忙吧