[英]OpenWRT C program not receiving packets
我為OpenWrt路由器編譯了一個簡單的C UDP服務器和客戶端。 當兩個都在我的電腦上時,代碼按預期工作。 如果在路由器上,客戶端似乎成功發送了數據包(端口6115),因為如果我將數據包發送到計算機(使用相同的服務器代碼),則我的計算機會確認它們。 但是,無論客戶端是在路由器上運行(使用本地環回)還是在PC上,服務器都不會在路由器上接收到它們。
在路由器上,沒有其他程序使用端口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)發送數據包,防火牆甚至會干擾,還是我應該嘗試除弄亂防火牆以外的其他方法?
我聽說問題可能是由於我的路由器設備是高位優先端引起的,如果這可能會導致問題,我該怎么辦?
如果相關,以下是客戶端和服務器代碼(用於本地環回):
服務器:
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_addr.s_addr = htonl(INADDR_ANY); 在調用bind()之前; 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.