服务器端是用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#做客户端,该如何处理这个数据包呀?请各位大虾帮帮忙呀!
// 定义数据包头
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#做客户端,该如何处理这个数据包呀?请各位大虾帮帮忙呀!
struct {
short intCommand;
charCallerID[32];
short intResult
charBuffer[1024];
} CallerTraceStruct;
与包头DataForm中的unsigned char Data[8192];如何互相转换呀,
还请各位大虾赐教!
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的值为什么总是乱码,而所有的数字字段都没有问题
各位老大帮帮忙吧