如果socket一端传送过来的一个数据段既有整型,又有浮点,又有字符串数据,我在另一端该如何正确的接收呢?

解决方案 »

  1.   

    你知道传输来的数据类型了,强制转为char *,或象raw_socket编程处理数据一样!!自己定义结构!!强制转化成结构来处理、
      

  2.   

    我也有这个问题啊,我在客户端传递的时候send的第一个参数是结构体的地址,第二个参数是结构体的大小,发送到服务器端的时候我用一个比较大的char数组接受,接受以后想强制转换为原始结构体,但是它总是说把一个char指针转换为struct指针啊,这是怎么回事?
    我的代码是:
    typedef struct data DATA
    客户端:
    DATA datatoSend;
    pSocket-》Send(LPCSTR(&datatoSend),sizeof(DATA))
    服务器端是
    DATA dataReceived;
    char Msg[20];
    ...//存放接受数据过程
    &dataReceived = (DATA)Msg;
    请问这个是什么原因啊?急啊
      

  3.   

    &dataReceived = (DATA)Msg;
    你这个肯定错了啊,应该是
    DATA *datatoSend = (DATA *)Msg;
      

  4.   

    或者你将&dataReceived = (DATA)Msg;
    改成这样也可以:
    memcpy(&dataReceived, Msg, sizeof(DATA));
      

  5.   

    ximenying(西门)兄说的对另外还要防止"粘包"情况的发生,就是你可能接受到半个结构的数据,这样你需要判断你接受的数据结构是否就是你定义的DATA结构体。
      

  6.   

    结构体
    有关数据结构的问题,基本都可以用结构体解决
    传输时用char*强制转换
    接收的时候,可以定义好结构体,再recv(socket,&Data,sizeof(Data))
      

  7.   

    我做的传输是发送字符串,中间加个分隔符。如发送 "123|abc|xyz"
      

  8.   

    任何数在网络传输中都是以二进制来传输的,在内存中也是以二进制来存在的。其实用BYTE*或者char*就可以表示你所需要的整数,double或者自定义类型。
    申请一块足够大的内存来接收,存放这些数据,然后分析,处理。
    char* buf = (char*)malloc(SOCKET_RECV_MAXSIZE+1);
    ....//判断是否申请成功
    numbyte=recv(cli_fd, buf, SOCKET_RECV_MAXSIZE, 0);
    ...
    ....
    最后别忘记free掉那块内存。
    if( NULL!=buf )
    {
      free(buf);
      buf=NULL;
    }//------------------------------
    其实更好的方法是你定义一个消息传递的消息。比如:
    typedef struct message_hdr{
    unsigned short msg_type; //消息类型
    unsigned short cmd_type; //命令类型
        unsigned short optional_cmds; //扩展类型
        unsigned short chksum; //Chksum校验
        unsigned long  data_len; //数据长度
        unsigned long  retcode; //描述信息代码
    }MSG_HDR;
    发送数据前,先发送消息,这样,接收端根据消息类型和命令类型来判断执行什么动作,根据数据长度来确定接收数据的大小。