我對C. 編寫使用TCP套接字客戶端服務器應用程序用於將數據寫入到服務器我送的結構是這樣的:對C座發送結構
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));
}
問題是數據在服務器上被兩次接收,就像在兩個不同的數據包中一樣。第二個數據包大多包含垃圾。
我瀏覽過互聯網,其中大部分都是有關endianess的問題。但這在這裏不是問題,客戶端和服務器都事先知道消息長度,只有服務器端收到兩次數據。
請任何人都可以提出我錯過了什麼?
我作出以下改變:
#define SIZE 18
在客戶端和
#define RSIZE 18
在服務器端
及其用於限定尺寸工作 問題是使用的sizeof(dsfeedbackPkt) 。
收到的第一個數據包的大小是否小於SIZE? – usr2564301
什麼是「尺寸」? –
向我們展示您發送和接收數據的實際代碼。 –