01、TCP相關API
1、tcp_arg()
該函式用于傳遞給應用程式的具體狀態,在控制塊標志建立以后呼叫,即在函式tcp_new()呼叫之后才能呼叫
|
功能 |
指定應該傳遞給所有回呼函式的應用程式的具體狀態 |
|
原型 |
void tcp_arg(struct tcp_pcb *pcb, void *arg) |
|
引數 |
pcb:當前TCP連接的控制塊 arg: 需要傳遞給回呼函式的引數 |
|
回傳 |
無 |
2、tcp_new()
該函式在定義一個tcp_pcb控制塊后應該首先被呼叫,以建立該控制塊的連接標志
|
功能 |
建立一個新的連接標志(pcb) |
|
原型 |
struct tcp_pcb *tcp_new(void) |
|
引數 |
無 |
|
回傳 |
pcb: 正常建立了連接標志,回傳建立的pcb NULL:新的pcb記憶體不可用時 |
3、tcp_bind()
該函式用戶系結本地的IP地址和埠號,用戶可以將其系結在一個任意的本地IP地址上,它也只能在函式tcp_new()呼叫之后才能呼叫
|
功能 |
系結本地IP地址和埠號 |
|
原型 |
err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) |
|
引數 |
pcb: 準備系結的連接,類似于BSD標準中的Sockets ipaddr:系結的IP地址,如果為IP_ADDR_ANY,則將連接系結到所有的本地IP地址上 port: 系結的本地埠號,注意:千萬不要和其它的應用程式產生沖突 |
|
回傳 |
ERR_OK:正確地系結了指定的連接 ERR_USE: 指定的埠號已經系結了一個連接,產生了沖突 |
4、tcp_listen()
當一個正在請求的連接被接收時,由tcp_accept()函式指定的回呼函式將會被呼叫,當然,在呼叫本函式前,必須首先呼叫函式tcp_bind()來系結一個本地的IP地址和埠號
|
功能 |
使指定的連接開始進入監聽狀態 |
|
原型 |
struct tcp_pcb *tcp_listen (struct tcp_pcb *pcb) |
|
引數 |
pcb:指定將要進入監聽狀態的連接 |
|
回傳 |
pcb: 回傳一個新的連接標志pcb,它作為一個引數傳遞給將要被分派的函式,這樣做的原 因是處于監聽狀態的連接一般只需要較小的記憶體,于是函式tcp_listen()就會識訓原始連接 的記憶體,而重新分配一個較小記憶體塊供處于監聽狀態的連接使用, NULL: 監聽狀態的連接的記憶體塊不可用時,回傳NULL,如果這樣的話,作為引數傳遞給 函式tcp_listen()的pcb所占用的記憶體將不能夠被分配, |
5、tcp_listen_with_backlog()
該函式同tcp_listen()一樣,但是該函式將限制在監聽佇列中未處理的連接的數量,這是通過引數backlog來實作的,要使用該函式,需要在組態檔lwipopts.h中設定TCP_LISTEN_BACKLOG=1,
|
功能 |
使指定的連接開始進入監聽狀態,但將會限制監聽佇列中連接的數量 |
|
原型 |
struct tcp_pcb *tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog) |
|
引數 |
pcb: 指定將要進入監聽狀態的連接 backlog: 限制監聽佇列中連接的數量 |
|
回傳 |
pcb: 回傳一個新的連接標志pcb,它作為一個引數傳遞給將要被分派的函式,這樣做的原 因是處于監聽狀態的連接一般只需要較小的記憶體,于是函式tcp_listen()就會識訓原始 連接的記憶體,而重新分配一個較小記憶體塊供處于監聽狀態的連接使用, NULL: 監聽狀態的連接的記憶體塊不可用時,回傳NULL,如果這樣的話,作為引數傳遞 給函式tcp_listen()的pcb所占用的記憶體將不能夠被分配, |
6、tcp_accepted()
這個函式通常在“accept”的回呼函式中被呼叫,它允許LwIP去執行一些內務作業,例如,將新來的連接放入到監聽佇列中,以等待處理,
|
功能 |
通知LwIP一個新來的連接已經被接收 |
|
原型 |
void tcp_accepted(struct tcp_pcb *pcb) |
|
引數 |
pcb: 已經被接收的連接 |
|
回傳 |
無 |
7、tcp_accept()
當處于監聽的連接與一個新來的連接連接上后,該函式指定的回呼函式將被呼叫,通常在tcp_listen()函式呼叫之后呼叫,
|
功能 |
指定處于監聽狀態的連接接通后將要呼叫的回呼函式 |
|
原型 |
void tcp_accept(struct tcp_pcb *pcb, err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) |
|
引數 |
pcb:指定一個處于監聽狀態的連接 accept:指定連接接通后將要呼叫的回呼函式 |
|
回傳 |
無 |
8、tcp_connect()
請求引數pcb指定的連接連接到遠程主機,并發送打開連接的最初的SYN段,函式tcp_connect()呼叫后立即回傳,它并不會等待連接一定要正確建立,如果當連接正確建立,那么它會直接呼叫第四個引數指定的函式(connected引數),相反地,如果連接不能夠被正確建立,這原因可能是遠程主機拒絕連接,也可能是遠程主機不應答,無論是什么原因,都會呼叫connected函式來設定相應的引數err
|
功能 |
請求指定的連接連接到遠程主機,并發送打開連接的最初的SYN段 |
|
原型 |
err_t tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, err_t (* connected)(void *arg, struct tcp_pcb *tpcb, err_t err)) |
|
引數 |
pcb:指定一個連接(pcb) ipaddr: 指定連接遠程主機的IP地址 port: 指定連接遠程主機的埠號 connected:指定連接正確建立后呼叫的回呼函式 |
|
回傳 |
ERR_MEM:當訪問SYN段的記憶體不可用時,即連接沒有成功建立 ERR_OK: 當SYN被正確地訪問時,即連接成功建立 |
9、tcp_write()
該函式功能是發送TCP資料,但是并不是一經呼叫,就立即發送資料,而是將指定的資料放入到發送佇列,由協議內核來決定發送,發送佇列中可用位元組的大小可以通過函式tcp_sndbuf()來重新獲得,使用這個函式的一個比較恰當的方法是以函式tcp_sndbuf()回傳的位元組大小來發送資料,如果函式回傳ERR_MEM,則應用程式就等待一會,直到當前發送佇列中的資料被遠程主機成功地接收,然后在嘗試發送下一個資料
|
功能 |
發送TCP資料 |
|
原型 |
err_t tcp_write(struct tcp_pcb *pcb, void *dataptr, u16_t len, u8_t copy) |
|
引數 |
pcb:指定所要發送的連接(pcb) dataptr:是一個指標,它指向準備發送的資料 len: 指定要發送資料的長度 copy: 這是一個邏輯變數,它為0或者1,它指定是否分配新的記憶體空間,而把要發送的數 據復制進去,如果該引數為0,則不會為發送的資料分配新的記憶體空間,因而對發送 資料的訪問只能通過指定的指標 |
|
回傳 |
ERR_MEM:如果資料的長度超過了當前發送資料緩沖區的大小或者將要發送的段佇列的 長度超過了檔案lwipopts.h中定義的上限(即最大值),則函式tcp_write()呼叫失 敗,回傳ERR_MEM ERR_OK:資料被正確地放入到發送佇列中,回傳ERR_OK |
10、tcp_sent()
該函式用于設定遠程主機成功接收到資料后呼叫的回呼函式,通常也在函式tcp_listen()之后呼叫,
|
功能 |
指定當遠程主機成功地接收到資料后,應用程式呼叫的回呼函式 |
|
原型 |
void tcp_sent(struct tcp_pcb *pcb, err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len)) |
|
引數 |
pcb: 指定一個與遠程主機相連接的連接(pcb) sent: 指定遠程主機成功地接收到資料后呼叫的回呼函式,“len”作為引數傳遞給回呼函式, 給出上一次已經被確認的發送的最大位元組數, |
|
回傳 |
無 |
11、tcp_recv()
該函式用于指定當有新的資料接收到時呼叫的回呼函式,通常在函式tcp_accept()指定的回呼函式中呼叫,
|
功能 |
指定當新的資料接收到時呼叫的回呼函式 |
|
原型 |
void tcp_recv (struct tcp_pcb *pcb, err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) |
|
引數 |
pcb: 指定一個與遠程主機相連接的連接(pcb) recv: 指定當新的資料接收到時呼叫的回呼函式,該回呼函式可以通過傳遞一個NULL的 pbuf結構用來指示遠程主機已經關閉連接,如果沒有錯誤發生,則回呼函式回傳 ERR_OK,并且必須釋放掉pbuf結構,否則,如果函式的呼叫中發生錯誤,那么千 萬不要釋放該結構,以便LwIP內核可以保存該結構,從而等待以后處理, |
|
回傳 |
無 |
12、tcp_recved()
當應用程式接收到資料的時候該函式必須被呼叫,用于獲取接收到的資料的長度,即該函式應該在函式tcp_recv()指定的回呼函式中呼叫,
|
功能 |
獲取接收到的資料的長度 |
|
原型 |
void tcp_recved(struct tcp_pcb *pcb, u16_t len) |
|
引數 |
pcb: 指定一個與遠程主機相連接的連接(pcb) len:獲取接收到的資料的長度 |
|
回傳 |
無 |
13、tcp_poll()
當使用LwIP的輪詢功能時必須呼叫該函式,用于指定輪詢的時間間隔及輪詢時應該呼叫的回呼函式
|
功能 |
指定輪詢的時間間隔以及輪詢應用程式時應該呼叫的回呼函式 |
|
原型 |
void tcp_poll(struct tcp_pcb *pcb, err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval) |
|
引數 |
pcb:指定一個連接(pcb) poll: 指定輪詢應用程式時應該呼叫的回呼函式 interval:指定輪詢的時間間隔,時間間隔應該以TCP的細粒度定時器為單位,典型的設定 是每秒鐘兩次,把引數“interval”設定為10意味著應用程式將每5秒鐘輪詢一次, |
|
回傳 |
無 |
14、tcp_close()
|
功能 |
關閉一個指定的TCP連接,呼叫該函式后,TCP代碼將會釋放(洗掉)pcb結構 |
|
原型 |
err_t tcp_close(struct tcp_pcb *pcb) |
|
引數 |
pcb: 指定一個需要關閉的連接(pcb) |
|
回傳 |
ERR_MEM:當需要關閉的連接沒有可用的記憶體時,該函式回傳ERR_MEM,如果這樣的 話,應用程式將通過事先確立的回呼函式或者是輪詢功能來等待及重新關閉連接 ERR_OK:連接正常關閉, |
15、tcp_abort()
該函式通過向遠程主機發送一個RST(復位)段來中止連接,pcb結構將會被釋放,該函式是不會失敗的,它一定能完成中止的目的,如果連接是因為一個錯誤而產生了中止,則應用程式會通過回呼函式靈敏地處理這個事件,通常發送錯誤而引起的連接中止都是因為記憶體資源短缺引起的,設定處理錯誤的回呼函式是通過函式tcp_err()來完成,
|
功能 |
中止一個指定的連接(pcb) |
|
原型 |
void tcp_abort(struct tcp_pcb *pcb) |
|
引數 |
pcb: 指定一個需要關閉的連接(pcb) |
|
回傳 |
無 |
16、tcp_err()
該函式用于指定處理錯誤的回呼函式,一個可靠的優秀的應用程式一般都要處理可能出現的錯誤,如記憶體不可用等,這就需要呼叫該函式來指定一個回呼函式來獲取錯誤資訊
|
功能 |
指定處理錯誤的回呼函式 |
|
原型 |
void tcp_err(struct tcp_pcb *pcb, void (* err)(void *arg, err_t err)) |
|
引數 |
pcb: 指定需要處理的發送錯誤的連接(pcb) err: 指定發送錯誤時呼叫的回呼函式,因為pcb結構可能已經被洗掉了,所以在處理錯誤 的回呼函式中pcb引數不可能傳遞進來, |
|
回傳 |
無 |
02、UDP相關API
1、udp_new()
該函式用于建立一個用于UDP通信的UDP控制塊(pcb),但是這個pcb并沒有被激活,除非該pcb已經被系結到一個本地地址上或者連接到一個固定地址的遠程主機,在定義一個udp_pcb控制塊后該函式應該首先被呼叫,以建立該控制塊的連接標志
|
功能 |
建立一個用于UDP通信的UDP控制塊(pcb) |
|
原型 |
struct udp_pcb *udp_new(void) |
|
引數 |
無 |
|
回傳 |
udp_pcb:建立的UDP連接的控制塊(pcb) |
2、udp_remove()
該函式用于洗掉一個指定的連接,通常是控制塊在建立成功后,即在函式udp_new()呼叫之后,當不需要該網路連接來通信了,就需要將其洗掉,以釋放該連接(pcb)所占用的資源,
|
功能 |
洗掉并釋放掉一個udp_pcb |
|
原型 |
void udp_remove(struct udp_pcb *pcb) |
|
引數 |
pcb:指定要洗掉的連接(pcb) |
|
回傳 |
無 |
3、udp_bind()
該函式用戶系結本地的IP地址和埠號,用戶可以將其系結在一個任意的本地IP地址上,它也只能在函式udp_new()呼叫之后才能呼叫
|
功能 |
為指定的連接系結本地IP地址和埠號 |
|
原型 |
err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) |
|
引數 |
pcb:指定一個連接(pcb) ipaddr:系結的本地IP地址,如果為IP_ADDR_ANY,則將連接系結到所有的本地IP地址上 port: 系結的本地埠號,注意:千萬不要和其它的應用程式產生沖突 |
|
回傳 |
ERR_OK:正確地系結了指定的連接 ERR_USE: 指定的埠號已經系結了一個連接,產生了沖突 |
4、udp_connect()
該函式將一個指定的連接(pcb)連接到遠程主機,由于UDP通信是面向無連接的,所以這不會引數任何的網路流量(網路資料收發),它僅僅是設定了一個遠程連接的IP地址和埠號,
|
功能 |
將引數“pcb”指定的連接控制塊連接到遠程主機 |
|
原型 |
err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) |
|
引數 |
pcb:指定一個連接(pcb) ipaddr:設定連接的遠程主機IP地址 port: 設定連接的遠程主機埠號 |
|
回傳 |
ERR_OK:正確連接到遠程主機 其它值: LwIP的一些錯誤代碼標志,表示連接沒有正確建立 |
5、udp_disconnect()
該函式關閉引數“pcb”指定的連接,同函式udp_connect()作用相反,由于UDP通信是面向無連接的,所以這個函式同樣不會引數任何的網路流量((網路資料收發),它僅僅是洗掉了遠程連接的地址
|
功能 |
關閉引數“pcb”指定的連接, 同函式udp_connect()作用相反 |
|
原型 |
void udp_disconnect(struct udp_pcb *pcb) |
|
引數 |
pcb:指定要洗掉的連接(pcb) |
|
回傳 |
無 |
6、udp_send()
該函式使用UDP協議發送pbufp指向的資料,在需要發送資料時呼叫,發送后,該pbuf結構并沒有被釋放,呼叫該函式后,資料包將被發送到存放在pcb中的當前指定的IP地址和埠號上,如果該pcb沒有連接到一個固定的埠號,那么該函式將會自動隨機地分配一個埠號,并將資料包發送出去,通常,在呼叫前都會先呼叫函式udp_connect()
|
功能 |
使用UDP協議發送pbuf p指向的資料 |
|
原型 |
err_t udp_send(struct udp_pcb *pcb, struct pbuf *p) |
|
引數 |
pcb:指定發送資料的連接(pcb) p: 包含需要發送資料的pbuf鏈 |
|
回傳 |
ERR_OK:資料包成功發送,沒有任何錯誤發生 ERR_MEM:記憶體不可用 ERR_RTE:不能找到到達遠程主機的路由 其它值:其它的一些錯誤碼,都表示發送了錯誤 |
7、udp_sendto()
該函式同udp_send()作用一樣,但是它指定了發送的目的主機IP地址和埠號,相當于udp_connect()和函式udp_send()合在一起使用的效果,但是,如果在呼叫該函式前已經呼叫過函式udp_connect(),那么發送目的主機的IP地址和埠號將以本函式指定的為準,由函式udp_connect()指定的將會被重繪
|
功能 |
向具有指定的IP地址和埠號遠程主機發送UDP資料 |
|
原型 |
err_t udp_sendto(struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port) |
|
引數 |
pcb:指定發送資料的連接(pcb) p: 包含需要發送資料的pbuf鏈 dst_ip:發送資料的遠程主機IP地址 dst_port:發送資料的遠程主機埠號 |
|
回傳 |
同函式udp_send()的回傳值一樣 |
8、udp_recv()
該函式用于指定當有新的UDP資料接收到時被呼叫的回呼函式,回呼函式將的引數將傳遞進遠程主機的IP地址、埠號及接收到的資料等資訊
|
功能 |
指定一個接收到UDP資料包時被呼叫的回呼函式 |
|
原型 |
void udp_recv(struct udp_pcb *pcb, void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port), void *recv_arg) |
|
引數 |
pcb:指定一個連接(pcb) recv: 指定資料包接收到時的回呼函式 recv_arg:傳遞給回呼函式的引數 |
|
回傳 |
無 |
點擊查看本文所在的專輯,STM32F207網路開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/283005.html
標籤:其他
