OpenWRT C程序未接收数据包
我为OpenWrt路由器编译了一个简单的C UDP服务器和客户端。当这两个代码都在我的电脑上时,它们会按预期工作。如果在路由器上,客户端似乎会成功发送数据包(端口6115),因为如果我将数据包发送到电脑(使用相同的服务器代码),我的电脑会确认这些数据包。但是,无论客户端是在路由器(使用本地环回)上运行还是在pc上运行,如果在路由器上,服务器都不会接收到它们 在路由器上,没有其他程序使用端口6115 我在OpenWRT C程序未接收数据包,c,networking,embedded-linux,firewall,openwrt,C,Networking,Embedded Linux,Firewall,Openwrt,我为OpenWrt路由器编译了一个简单的C UDP服务器和客户端。当这两个代码都在我的电脑上时,它们会按预期工作。如果在路由器上,客户端似乎会成功发送数据包(端口6115),因为如果我将数据包发送到电脑(使用相同的服务器代码),我的电脑会确认这些数据包。但是,无论客户端是在路由器(使用本地环回)上运行还是在pc上运行,如果在路由器上,服务器都不会接收到它们 在路由器上,没有其他程序使用端口6115 我在/etc/config/firewall中检查了防火墙配置,它似乎允许来自端口6115的数据包
/etc/config/firewall
中检查了防火墙配置,它似乎允许来自端口6115的数据包:
config rule
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option target 'ACCEPT'
option proto 'tcp udp'
option src_port '6115'
option dest_port '6115'
option name 'Allow-myudp'
option src '*'
option family 'ipv4'
我试图禁用防火墙,但没有任何改变
问题:如果我通过本地环回(127.0.0.1)发送数据包,防火墙会干扰吗?或者我应该尝试其他方法而不是破坏防火墙吗
我听说问题可能是因为我的路由器设备是big-endian造成的,如果这会导致问题,我该怎么办
如果相关,以下是客户端和服务器代码(用于本地环回):
服务器:
int udpSocket, ndat;
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
char buf[1024];
udpSocket=socket(PF_INET,SOCK_DGRAM,0);
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(6115);
memset(serverAddr.sin_zero,'\0',sizeof serverAddr.sin_zero);
bind(udpSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
addr_size=sizeof serverStorage;
while (1) {
ndat=recvfrom(udpSocket,buf,1024,0,(struct sockaddr*)&serverStorage,&addr_size);
printf("DATA RECEIVED WITH %u BYTES\n",ndat);
}
客户:
int udpSocket;
char buffer[1024]="Hello [home]";
struct sockaddr_in serverAddr;
socklen_t addr_size=sizeof serverAddr;
udpSocket=socket(PF_INET,SOCK_DGRAM,0);
serverAddr.sin_family=AF_INET;
serverAddr.sin_port=htons(6115);
serverAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
memset(serverAddr.sin_zero,'\0',sizeof serverAddr.sin_zero);
bind(udpSocket,(struct sockaddr*)&serverAddr,sizeof(serverAddr));
sendto(udpSocket,buffer,1024,0,(struct sockaddr*)&serverAddr,addr_size);
printf("Sent...\n");
如果你有什么问题,请给我一些建议。提前感谢。我的错,我忽略了服务器代码,因为出于某种原因,它在PC上工作。无论如何,我必须添加serverAddr.sin\u addr.s\u addr=htonl(INADDR\u ANY)在调用bind()之前