使用struct和union通过tcp ip发送数据

时间:2014-01-06 19:42:54

标签: c tcp struct unions

抱歉我的英语不好!我正在用C开发一个程序来通过tcp ip发送数据。这个程序应该使用struct和union,如下所示(我只将部分代码放在一起):

***发送数据的服务器:

使用包含需要发送的数据的结构:

struct movimentos{

    bool Frente;
    bool Esquerda;
    bool Direita;
    bool Parado;
    bool PassoDireita;
    bool PassoEsquerda;
}m;

包含这些数据并确定结构大小的联合:

union dados{

    movimentos m;
    char tamanho [(sizeof movimentos)];
}uniao;

然后,我使用'send'函数将此结构的地址发送到客户端:

send(winsock,uniao.tamanho,sizeof(uniao.tamanho),0);

* 接收数据的客户:

具有与服务器相同的结构和联合:

struct movimentos{

    bool Frente;
    bool Esquerda;
    bool Direita;
    bool Parado;
    bool PassoDireita;
    bool PassoEsquerda;
}move;

union dados{

    movimentos move;
    char tamanho [(sizeof movimentos)];
}uniao;

函数'recv'接收套接字和Union地址:

int bytes=recv(winsock,uniao.tamanho,sizeof(uniao.tamanho),0);

我的问题是以下 **

我想使用客户端服务器发送的struct的值。但我不知道该怎么做。我想知道如何让收到的数据能够操作程序中的操作。

谢谢!

2 个答案:

答案 0 :(得分:0)

使用 sprintf_s vsscanf

在服务器端,在sprintf_s的帮助下使用您的结构创建格式化字符串,然后发送。

在客户端使用vsscanf来读取格式化数据。

答案 1 :(得分:0)

试试这个:

//~~~~~~~~~~~~~~~~SENDER
movimentos movi;
//send your struct by giving it's address
send(winsock, &movi, sizeof(movimentos), 0);
//~~~~~~~~~~~~~~~~RECEIVER
movimentos movi;
int bytes = recv(winsock, &movi, sizeof(movimentos), 0);
//~~~~~~~~~~~~~~~~RECEIVER 2 (BETTER)
movimentos movi;
BYTE buffer[1024]; //for example
int bytes = recv(winsock, buffer, 1024, 0);
memcpy((void*)&movi, (void*)buffer, sizeof(movimentos));