如何实现socket传送控制消息

怎么实现socket传送控制消息?
就是比如我做一个C/S的小系统。那么我会涉及一些数据处理。比如登录。比如要查询,比如要修改。等等。我想的是不要直接从客户端把SQL文发送到服务器。因为这样即使是加密的也不太安全。我就想发送特征码。让服务器去解析。于是,就定义了一个结构体typedef struct Message{ char msg[16],int len,char data[200]}Msg; 第一个字段表示是什么消息(比如是登录就是WM_LOGIN,修改就是WM_MODIFY……)第二个是发送的data的长度。第三个是data的缓冲区容量。可是当我从客户端发送到服务器端时,失踪只能收到第一个字段。其他的就收不到了。我想问的是,我这种想法可行不可行。希望大哥大姐们给小弟一个解决方案。只要是能发送诸如此类的控制消息的。
我那个测试代码如下:Client:

C/C++ code
typedef struct structMsg
    {
        char msg[16];
        int len;
        char info[100];
    }Msg;
    Msg msg;
    strcpy(msg.msg,"login");
    msg.len = 100;
    strcpy(msg.info,"this is a struct from client . and it is a test!!");
    char* buffer;
    buffer = (char*)malloc(sizeof(msg));
    memcpy(buffer,&msg,sizeof(msg));
send(clientSocket,buffer,sizeof(buffer)+1,0);  




------解决方案--------------------
这个思路可以啊。直接send(clientSocket,(char *)&msg,sizeof(msg),0);
------解决方案--------------------
另外一个调试方法就是,你可以尝试向网络助手发送,如果助手里接收到的是你需要的数据,那就保证你的发送是正常的,这样同样可以用网络助手发送,调试接收部分了
------解决方案--------------------
结构体的空间大小最好是4的倍数,因此建议内部各变量都是4字节的倍数。
自定义数据包发送、接收,主要的工作基本上就是做好结构体数据转字节流的序列化和反序列化操作,另外注意处理好粘包的情况。
------解决方案--------------------
结构类似这么定义:
struct Str_Info
{
unsigned char d1;
unsigned char Reserve;//保留,就是为了对齐字节
unsigned char Reserve1;//保留,就是为了对齐字节
unsigned char Reserve2;//保留,就是为了对齐字节
int d2;//在计算机里C语言里,int表示4字节,不是2字节
float d3;//4字节
short d4;//2字节
unsigned char Reserve3;//保留,就是为了对齐字节
unsigned char Reserve4;//保留,就是为了对齐字节
}
这样就字节就对齐了。另外在通信时最好转成无符号的字节型,就是转成unsigned char类型,这样有可能就不会出现因为字符型遇到'\0'就认为结束了。接收方收到后再进行相应的转换
------解决方案--------------------
探讨

引用:

另外一个调试方法就是,你可以尝试向网络助手发送,如果助手里接收到的是你需要的数据,那就保证你的发送是正常的,这样同样可以用网络助手发送,调试接收部分了


什么是网络助手?希望指点一下!等……

------解决方案--------------------
说说错误原因吧
send(clientSocket,buffer,sizeof(buffer)+1,0);
这里buffer是指针,sizeof(buffer)+1 = 5 字节(32位系统)
刚好能完整发送"login"
参照#2楼send(clientSocket,(char *)&msg,sizeof(msg),0);改
不要malloc一个额外的buffer出来,硬要的话,也是
MSG *msg = (MSG*)malloc(sizeof(MSG));

结构体里不要使用CString
是不能直接send出去的,需要序列化的

你这个就是三层数据库模型,网上找找吧