无法作为UDP客户端接收数据

时间:2016-01-20 05:50:23

标签: network-programming udp avr ethernet microchip

我正在尝试使用UDP从ENC28J60模块发送和接收数据。为此,我获得了AVR ATmega8的this sample code。此代码工作正常,但它只将数据发送到服务器。所以,我对代码进行了一些小改动,并检查ENC28J60的接收缓冲区中是否有任何数据,它将发送" aaaaaaaaaaaa"到服务器,否则它将发送" Hello world"。

这是我的新代码: -

int main(void) {




    //=====setup eth interface
    uint16_t plen = 0,  dat_p = 0;
    //initialize enc28j60
    enc28j60Init(mymac);


    _delay_ms(100);

    // Magjack leds configuration, see enc28j60 datasheet, page 11 
    // LEDB=yellow LEDA=green
    // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
    // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
    enc28j60PhyWrite(PHLCON,0x476);


    _delay_ms(100);

    //init the ethernet/ip layer:
    init_ip_arp_udp_tcp(mymac,myip);

    //output for a led  
    DDRC|=(1<<4);

    while(1){


        dat_p=enc28j60PacketReceive(BUFFER_SIZE, buf);

        if(dat_p != 0){
                      buf[UDP_DATA_P]='a';
                      buf[UDP_DATA_P+1]='a';
                      buf[UDP_DATA_P+2]='a';
                      buf[UDP_DATA_P+3]='a';
                      buf[UDP_DATA_P+4]='a';
                      buf[UDP_DATA_P+5]='a';
                      buf[UDP_DATA_P+6]='a';
                      buf[UDP_DATA_P+7]='a';
                      buf[UDP_DATA_P+8]='a';
                      buf[UDP_DATA_P+9]='a';
                      buf[UDP_DATA_P+10]='a';
        }
        else{

                    buf[UDP_DATA_P]='H';
                    buf[UDP_DATA_P+1]='E';
                    buf[UDP_DATA_P+2]='L';
                    buf[UDP_DATA_P+3]='L';
                    buf[UDP_DATA_P+4]='O';
                    buf[UDP_DATA_P+5]=' ';
                    buf[UDP_DATA_P+6]='W';
                    buf[UDP_DATA_P+7]='O';
                    buf[UDP_DATA_P+8]='R';
                    buf[UDP_DATA_P+9]='L';
                    buf[UDP_DATA_P+10]='D';
        }

        send_udp_prepare(buf,5001,dis_ip,5001,dis_mac);
        send_udp_transmit(buf,11);

        _delay_ms(200); //must be short enough to prevent ping requests to be timed-out
        PORTC^=(1<<4); // toggle a led 

    }



    return (0);
} 

现在我手动将一些数据从服务器发送到客户端(ENC28J60),但我仍然总是得到#34; Hello world&#34;在服务器端。所以,很明显我无法在我的客户端上收到数据。       那么,任何人都可以告诉我在ENC28J60模块上接收UDP数据的正确方法。

0 个答案:

没有答案