- 论坛徽章:
- 0
|
用PC机的虚拟机给上单元发UDP包(组播模式,上单元已经加入组播),实现控制上单元的动作,能完全实现。现在把同样的程序通过交叉编译,放arm上来控制上单元,结果发现,如果控制指令小于或等于两字节,则上单元不回应,而大于或等于3字节的UDP包,上单元有回应。
通过wrieshark抓包对比PC和arm板子发的包,发现完全无差别,但是小于2字节的包,上单元就是不予理睬。请教下这个是什么原因,是不是嵌入式对UDP最小包有限制?但是即使有限制,arm也把包发出去了啊
下面是部分代码:
#define MCAST_PORT 6680
#define MCAST_ADDR "236.6.7.10"
#define MCAST_INTERVAL 1
int main(int argc, char*argv)
{
char buffer[2]={0x10,0x20};
struct sockaddr_in mcast_addr;
int s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1)
{
perror("socket()");
return -1;
}
memset(&mcast_addr, 0, sizeof(mcast_addr));
mcast_addr.sin_family = AF_INET;
mcast_addr.sin_addr.s_addr = inet_addr(MCAST_ADDR);
mcast_addr.sin_port = htons(MCAST_PORT);
while(1) {
int n = sendto(s,buffer,2,0,(struct sockaddr*)&mcast_addr,sizeof(mcast_addr));
if( n < 0)
{
perror("sendto()");
return -2;
}
sleep(MCAST_INTERVAL);
}
return 0;
}
|
|