CSocket 的int Send(const void* lpBuf,int nBufLen,  int nFlags = 0 );只能传char字符串吗?能不能传结构体或其他什么的?
例如我要通知服务器执行删除数据库id为1234的记录,假如已首先约定服务器收到cmd=3为执行删除任务,那么在客户端传送的数据包结构为:{cmd=3,id=1234}又或者,客户端向服务器端请求指定id的个人信息,个人信息包括(id,姓名,年龄,积分),服务器端如何用一个包把这个信息发送到客户端,客户端获接收到包后又如何解析出各个字段的信息的?
主要疑问是,假如只是传了一串的char 过去的话,要把各个字段的信息解析划分开来很麻烦,有什么好的方法去解决这个问题?
大伙平时是怎么去做的?请多多指教,谢谢!

解决方案 »

  1.   

    struct InfoTable
    {
     long nID;
     char m_Name[MAX_PATH];
     char n_Age[MAX_PATH];
     int n_gral[MAX_PATH];
    } X_Info;
    Send(&X_Info,sizeof(X_Info),0);
    服务器端这样就行了,不过在客户端你要定义一张相同的结构来接收这段数据。
    这样做的前提是你发送的数据是定长的,如果不是定长的,就只有解析了。
      

  2.   

    接收端收到buf,强转为结构其实你要弄明白它为啥能这么发这个函数的第一个参数就是一个首地址,所以任何连续的地址都可以用来发送接收也一样
      

  3.   

    接收完数据后就用memcpy来复制数据
      

  4.   


    memcpy(&结构体变量,buffer,strlen(buffer))
      

  5.   

    Receive(&X_Info,sizeof(X_Info),0);在客户端再定义一个这样的数据结构,然后调用就行了,不用类型转换,MFC封装的Receive()已经帮你转换过了。