網上的關于這個組合的程序非常少,特地拿出來分享下面是部分代碼
- /*********************************************************************************
- **********************************************************************************
- * 文件名稱: TCP_SERVER.c *
- * 文件簡述:TCP服務器運用 *
- * 創建日期:2018.3 *
- * 版 本:V1.0 *
- * 作 者:Clever *
- * 說 明: *
- **********************************************************************************
- *********************************************************************************/
- /****************************************************************************
- * 名 稱: tcp_server_recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
- * 功 能:TCP數據接收和發送
- * 入口參數:
- * 返回參數:
- * 說 明:這是一個回調函數,當一個TCP段到達這個連接時會被調用
- ****************************************************************************/
- static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
- {
- struct pbuf *p_temp = p;
-
- if(p_temp != NULL)
- {
- tcp_recved(pcb, p_temp->tot_len); //獲取數據長度 tot_len:tcp數據塊的長度
- while(p_temp != NULL)
- {
- tcp_write(pcb,p_temp->payload,p_temp->len,TCP_WRITE_FLAG_COPY); // payload為TCP數據塊的起始位置
- tcp_output(pcb);
- p_temp = p_temp->next;
- }
- }
- else
- {
- tcp_close(pcb); // 作為TCP服務器不應主動關閉這個連接
- }
- pbuf_free(p); // 釋放該TCP段
- err = ERR_OK;
- return err;
- }
- /****************************************************************************
- * 名 稱: tcp_server_accept(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
- * 功 能:回調函數
- * 入口參數:
- * 返回參數:
- * 說 明:這是一個回調函數,當一個連接已經接受時會被調用
- ****************************************************************************/
- static err_t tcp_server_accept(void *arg,struct tcp_pcb *pcb,err_t err)
- {
- tcp_setprio(pcb, TCP_PRIO_MIN); /* 設置回調函數優先級,當存在幾個連接時特別重要,此函數必須調用*/
- tcp_recv(pcb,tcp_server_recv); /* 設置TCP段到時的回調函數 */
- err = ERR_OK;
- return err;
- }
- /****************************************************************************
- * 名 稱: TCP_server_init(void)
- * 功 能:完成TCP服務器的初始化,主要是使得TCP通訊快進入監聽狀態
- * 入口參數:
- * 返回參數:
- * 說 明:
- ****************************************************************************/
- void TCP_server_init(void)
- {
- struct tcp_pcb *pcb;
- pcb = tcp_new(); // 建立通信的TCP控制塊(pcb)
- tcp_bind(pcb,IP_ADDR_ANY,TCP_Server_PORT); // 綁定本地IP地址和端口號(作為tcp服務器)
- pcb = tcp_listen(pcb); // 進入監聽狀態
- tcp_accept(pcb,tcp_server_accept); // 設置有連接請求時的回調函數
- }
復制代碼
全部代碼51hei下載地址:
STM32F107-LWIP.7z
(7.2 MB, 下載次數: 71)
2021-4-29 23:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|