簡體   English   中英

OpenWRT C程序未接收到數據包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM