发第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) );
之后再发送,但仍不好使
跪求解法?
几天了还没解决
各位大侠帮帮忙啊相关结构如下:
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) );
之后再发送,但仍不好使
跪求解法?
发送用的函数是
WSASend()
管它什么,按二进制发送就行了.******************************************就是,发送的数据都是二进制的格式,在接收端中再将这些个二进制数据格式转换成程序需要的数据类型,可以是自己定义的结构,当然可以是已有的数据类型。