日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uip架构和局限

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uip架构和局限 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

怎么了解uip

可以看看uip.h。里面有使用函數的說明和例程。

uip_polling在main-while 中調用
check(uip_len>0 ) 有網絡數據后,處理事件。uip_polling定義了這些功能,uip才會有相應的功能。
處理哪些事件。如

UIP_ETHTYPE_IP \ /-> udp_app 用戶程序UIP_ETHTYPE_ARP |--uip_process核心調用處理---|->tcp_app定時檢測UDP/TCP通訊事件 | |->tcp連接處理uip_udp_periodic/輪詢用戶app / \->數據錄入

UDP用戶代碼

初始化 void udp_app_init(void) {uip_ipaddr_t addr;struct uip_udp_conn *c;uip_ipaddr(&addr, 192,168,0,132);c = uip_udp_new(&addr, HTONS(UDP_TEST_PORT)); //remote portif(c != NULL) {uip_udp_bind(c, HTONS(UDP_TEST_PORT)); //local port} }------------------------------------------------------------------------------------ void udp_appcall(void) { switch(uip_udp_conn->lport){case HTONS(UDP_TEST_PORT):udp_test_app(uip_appdata); break;default: break;} }

BB幾句

  • uip里有很多全局變量,用起來有點頭大。有時根本不知道他用來干嘛的,幾個差不多的變量經常搞混

    例如:1網口的接口代碼,也是用的uip_len和uip_buf這種全局變量void tapdev_send(void){ENC28J60_Packet_Send(uip_len,uip_buf);}2 檢查網絡事件if(uip_len>0)
  • 代碼風格也不怎么好

    uip_process里還很多gotoif(flag == UIP_UDP_SEND_CONN) {goto udp_send;}
  • UDP使用限制

    只能單工模式:發送和接收數據共用一個buff,在接收函數里甚至不能回送接收信息

    官方例程unix節選 unsigned int tapdev_read(void) {int ret; ret = read(fd, uip_buf, UIP_BUFSIZE);return ret; } /*---------------------------------------------------------------------------*/ void tapdev_send(void) {int ret;ret = write(fd, uip_buf, uip_len); }
    void udp_receive_app(char * p){if(uip_newdata()){memcpy((char *)udp_send_databuf,uip_appdata,UIP_APPDATA_SIZE);uip_send(udp_send_databuf,UIP_APPDATA_SIZE); }}這樣數據是不會發送出來的,而且發送幾條后uip就會停止udp服務
    只要不動uip_appdata,這樣是可以的(原因我也不清楚,很納悶,uip還是) void udp_test_app(char * p) {if(uip_newdata()){strcpy((char *)udp_send_databuf,"good news \n");uip_send(udp_send_databuf,11); //或者直接 uip_send("good news \n",11); } }

    UDP的接收app里,沒有特殊處理,只能發送一條數據。
    因為uip_send()只是把數據放入buf,然后通過在uip_polling()中輪詢發送。所以連續多條uip_send()時只發送最后那條。如

    uip_send("this is a good news! \n",22);uip_send("this is a bad news! \n",21);就只發送后面一條

    主要函數說明

  • uip_polling()
    放在main主循環里的用戶函數,通過不同事件調用uip_process()

  • uip_process()

    uip_process()都是通過類似定義來引用#define uip_input() uip_process(UIP_DATA)uip_polling都是通過以下函數來引用uip_process(),包括uip_input() 接收包處理uip_periodic(conn) TCP連接周期性處理uip_periodic_conn(conn) 制定TCP連接處理uip_poll_conn(conn) 輪詢特定連接uip_udp_periodic(conn) UDP周期性處理uip_udp_periodic_conn(conn) 特定UDP周期性處理
  • 總結

    以上是生活随笔為你收集整理的uip架构和局限的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。