发第2帖请教这个问题了
几天了还没解决
各位大侠帮帮忙啊相关结构如下:
typedef struct
{
OVERLAPPED overlapped;
WSABUF databuf;                 //buf 域和 buffer 指向同一地址
CHAR buffer[DATA_BUFSIZE];
DWORD bytessend;
DWORD bytesrecv;
}PER_IO_OPERATION_DATA, * LPPER_IO_OPERATION_DATA;
typedef struct 
{
SOCKET persocket;
}PER_HANDLE_DATA, * LPPER_HANDLE_DATA;
//Clinet's state enum structure
typedef enum { EMPTY, CONNECTSTATE, STARTSTATE } CLIENTSTATE;
//Message kind enum structure
typedef enum { CONNECT, START, WINNER }MESSAGEKIND;
//Data structure transferred
typedef struct 
{
INT tableno;
MESSAGEKIND msgkind;
CHAR data[DATA_BUFSIZE];
}DATATRANSFERRED;     //需要传输的结构
在发送结构体数据时,最先用的是简单的强制转换 DATATRANSFERRED 数据地址为 PER_IO_OPERATION_DATA 的 buffer 域, 不可行后再试过一个域一个域的内存拷贝,如下:
memcpy( (periodata->buffer+sizeof(INT)+sizeof(MESSAGEKIND)), 
(CHAR*)datatransferred.data, strlen(datatransferred.data) );

memcpy( periodata->buffer, (CHAR*)&datatransferred.tableno, sizeof(INT) );
memcpy( (periodata->buffer+sizeof(INT)), (CHAR*)&datatransferred.msgkind, sizeof(MESSAGEKIND) );

之后再发送,但仍不好使
跪求解法?

解决方案 »

  1.   

    DATATRANSFERRED data;send(&data, sizeof(data).....);
      

  2.   

    前提是使用完成端口模型
    发送用的函数是
    WSASend()
      

  3.   

    今天刚好成功实现机器间传送结构体!我的代码是这样的 memcpy(   szBuffer,&msg,sizeof(struct ctrlmsg)  );        nBytesSent = send(Socket, szBuffer, 256, 0);先把你的结构体copy 到 buffer里面! memcpy(   periodata.databuf.buf,&datatransferred,sizeof(DATATRANSFERRED)  ); 然后直接发送,对方收到再还原就可以了!!!
      

  4.   

    会不会是你的databuf.len里面没相应修改阿,看你用wsasend的思路应该没问题
      

  5.   

    另外有问题就是,楼主的Struct不知道有没注意到数据收齐问题,或者使用pack,否则的话sizeof(struct)!=sum(sizeof(struct.members))
      

  6.   

    DentistryDoctor(昨日黄花不再美) 
     
       
    管它什么,按二进制发送就行了.******************************************就是,发送的数据都是二进制的格式,在接收端中再将这些个二进制数据格式转换成程序需要的数据类型,可以是自己定义的结构,当然可以是已有的数据类型。  
     
      

  7.   

    http://blog.csdn.net/ximenying/archive/2006/08/08/1037519.aspx