我用socket的API函数进行通讯:
客户机的发送是:
  UINT ccstat.hi_point  = 0;
   UINT  ccstat.lo_point  = 1<<num;
     float ccstat.dc_value  = value;
 send(conn_socket,(char *)&ccstat,12,0);
服务器的接受是:
   char buf[12];
   ::recv(sock_msg,buf,12,0);
为什么总是接受不对,并且两个UINT都是对的,可是float总是不对,为什么??
难道不能直接传递float,如果这样的话怎么解决???????

解决方案 »

  1.   

    好像我也试过,发送、接收Struct结构Socket不可直接取地址发的,CSocket就可以。
    Socket中,要如 ccstat *pCcstat = new ccstat;
                   pCcstat->hi_point = XXX;
                   pCcstat->dc_value = XXX;
               send(conn_socket,(char *)pCcstat,sizeof(ccstat),0);
    般才行。接收也是如此。自己编的那个删除了,大概如此吧。
      

  2.   

    我得更改如下,
    客户机的发送是:
      UINT pccstat->hi_point  = 0;
       UINT  ccstat->lo_point  = 1<<num;
         float ccstat->dc_value  = value;
     send(conn_socket,(char *)pCcstat,sizeof(ccstat),0);
    服务器的接受是:
        
       ::recv(conn_socket,(char *)pCcstat,sizeof(ccstat),0);
    可是没有什么改善??
      

  3.   

    不要用12,用sizeof(ccstat). ccstat的结构大小不一定为12!!!!
    int转成网络字节:   htons()
    long转成网络字节:  htonl()