簡體   English   中英

通過C套接字發送結構

[英]sending structs over C sockets

我正在使用C上的TCP套接字編寫客戶端服務器應用程序。為了向服務器寫入數據,我正在發送如下結構:

typedef struct 
{
   uint64_t IEEE_ADDR;
   uint8_t endpoint;
   char requestedAction;
   uint8_t level;
   uint8_t wc;
   uint8_t address_mode;
   uint8_t gID;
   uint8_t sID;
   uint8_t val1;
   uint8_t val0;
   uint8_t status;
}dsfeedbackPkt;

為了序列化和發送數據,我編寫了以下函數:

void fb_serialise_send(dsfeedbackPkt *pkt)
{
unsigned char buffer[SIZE];
int bytes;

buffer[0] = ((pkt->IEEE_ADDR) >> 56);
buffer[1] = (pkt->IEEE_ADDR) >> 48;
buffer[2] = (pkt->IEEE_ADDR) >> 40;
buffer[3] = (pkt->IEEE_ADDR) >> 32;
buffer[4] = (pkt->IEEE_ADDR) >> 24;
buffer[5] = (pkt->IEEE_ADDR) >> 16;
buffer[6] = (pkt->IEEE_ADDR) >> 8;
buffer[7] = (pkt->IEEE_ADDR);
buffer[8] = (pkt->endpoint);
buffer[9] = pkt -> requestedAction;
buffer[10] = pkt->level;
buffer[11] = pkt-> wc;
buffer[12] = pkt->address_mode;
buffer[13] = pkt-> gID;
buffer[14] = pkt->sID;
buffer[15] = pkt->val1;
buffer[16] = pkt->val0;
buffer[17] = pkt->status;

bytes = write(cli_sockfd,buffer,sizeof(buffer));

}

問題在於,兩次在服務器上接收了兩次數據,就像在兩個不同的數據包中一樣。 第二個數據包主要包含垃圾。

我已經瀏覽了互聯網,其中大多數與耐力有關。 但這不是問題,客戶端和服務器也都預先知道消息長度,只有兩次在服務器端接收到數據。

請誰能建議我錯過了什么?

我進行了以下更改:

#define SIZE 18

在客戶端和

#define RSIZE 18

在服務器端

它的工作問題是使用sizeof(dsfeedbackPkt)定義大小。

我定義的SIZE等於sizeof(dsfeedbackPkt)

這是您的問題。 由於結構填充,該結構可能為20個字節,而不是18個字節。

SIZE更改為18,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM