我对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
什么是“尺寸”? –
向我们展示您发送和接收数据的实际代码。 –