當前位置:首頁 » 雲伺服器 » lwip搭建應用伺服器

lwip搭建應用伺服器

發布時間: 2022-12-25 13:48:36

⑴ LWIP協議棧下如何通過CGI上傳文件到WEB伺服器

不對,文件路勁後面就是跟著文件內容啊,要不然只傳文件路勁有什麼意義啊。cgi就是為網頁交互提過的一個介面而已。

⑵ lwip 1.4.1到lwip2.1.2升級之路

解壓後的文件結構可以看出,結構上沒有改動,因為用了git,所以增加了兩個相關的文件,並添加了另外兩個文件。

主要增加的doxygen這個文件夾,對查看文檔非常有幫助。其它的看看就行了。

V2.1.2相對V1.4.1增加了很多的上層應用,這些應用都放在apps這個文件夾里了。

這里只多了一個''if_api.c''的一個文件,跟socket有關;

snmp文件夾移到apps里邊去了,timers.c改成了timeouts.c,增加了其它的幾個文件。

posix文件夾移到compat去了,ipv4和ipv6里的文件移到lwip了

只是新增了文件。

增加了很多測試常式,根據需要看看就好,不影響升級。

升級有一個前提,必須保證除移植以外的文件都是官方的,沒有被修改過。因為,升級需要替換掉這些文件,如果修改過,那就有得扯了。這里用 NUC472_NUC442_BSP_CMSIS_V3.03.000 中的 FreeRTOS_lwIP_TCP_EchoServer 為例進行說明,開發工具為Keil MDK。

⑶ STM32 WEB伺服器經常用到CGI SSI,可是為什麼這方面一個具體的應用教程都沒有

其實SSI跟asp差別蠻大的,ssi只能是在shtml文件載入的時候,其中的ss標簽被替換為其他內容,(何種標簽替換為何種內容 是用戶在LwIP協議中自定義的),而ASP、CGi是可以在html載入後動態調用的,他們才能實現完善的動態交互功能

至於如何入手,lwip的源碼裡面有詳盡的英文注釋,lz可以對著看看。

如果你想進行lwip 的CGI編程,建議你看看這么幾個文件:httpd.h httpd.c httpd_cgi_ssi.c

我剛好是先學習了普通的PC機上搭建 IIS 伺服器,學習html 、cgi、asp方面的知識,然後才接觸lwip,然後在別人搭建好的嵌入式伺服器上進行cgi編程,基本上手了。

硬體上的cgi編程更底層,而復雜,如果你難以入手,你可以在你的windows下搭建IIS伺服器,熟悉一下cgi,再轉stm32上實現

⑷ 有沒有靠譜的lwip + ftp伺服器方案

ftp文件伺服器我們用愛米雲共享網盤代替了,簡單高效,好用

⑸ 如何搭建udp echo server

具體配置過程:
1、打開STM32CubeMX,並選擇好相應的晶元。文中的晶元為STM32F207VCT6,選擇後如下圖:

2、配置RCC時鍾、ETH、PA8以及使能LWIP;
由於此處我們的開發板硬體上為RMII方式,因此選擇ETH-RMII,若有同志的開發板為MII方式,請參考MII的配置方法,此處只針對RMII;
RCC選擇外部時鍾源,另外勾選MCO1,軟體會自動將PA8配置為MCO1模式,該引腳對於RMII方式很重要,用於為PHY晶元提供50MHz時鍾;
使能LWIP;

3、時鍾樹的相關配置,必須保證MCO1輸出為50Mhz,如果這個頻率不對會導致PHY晶元無法工作;
我這里因為晶元為207VCT6,為了使MCO1輸出為50Mhz,做了PLL倍頻參數的一些調整,總體如下:(同志們配置時可根據自己的晶元靈活配置,但需保證MCO1的輸出為50Mhz)

4、ETH、LWIP、RCC相關參數設置;
至此,比較重要的都在前面了,但是還有一點仍需要注意,即PA8引腳輸出速度,幾次不成功都是因為這個引腳沒注意。

後續的參數設置可以根據同志們自己的需求分別設置,這里給出我的設置供參考;
ETH參數保持默認,但中斷勾選一下;

LWIP參數設置如下:(因為我這里是配置UDP伺服器,IP選擇靜態分配)

5、生成工程,做最後的函數修改;
給生成的工程添加UDP伺服器的初始化以及埠綁定等相關函數;
我這里直接將之前的官方常式中的UDP伺服器文件加進來,如下:

之後將.c文件添加到用戶程序,主函數添加Udp的.h頭文件;如下:(udp文件的具體內容在後面給出)

6、主函數還需要添加一下幾個函數,在這里不對函數作用及實現原理講解,僅做添加說明。

附:udp_echoserver相關文件內容(該文件為官方的示常式序,版權歸官方,此處做轉載)
udp_echoserver.c的內容如下:

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "lwip/pbuf.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"
#include
#include

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define UDP_SERVER_PORT 7 /* define the UDP local connection port */
#define UDP_CLIENT_PORT 7 /* define the UDP remote connection port */

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port);

/* Private functions ---------------------------------------------------------*/

/**
* @brief Initialize the server application.
* @param None
* @retval None
*/
void udp_echoserver_init(void)
{
struct udp_pcb *upcb;
err_t err;

/* Create a new UDP control block */
upcb = udp_new();

if (upcb)
{
/* Bind the upcb to the UDP_PORT port */
/* Using IP_ADDR_ANY allow the upcb to be used by any local interface */
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);

if(err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(upcb, udp_echoserver_receive_callback, NULL);
}
}
}

/**
* @brief This function is called when an UDP datagrm has been received on the port UDP_PORT.
* @param arg user supplied argument (udp_pcb.recv_arg)
* @param pcb the udp_pcb which received data
* @param p the packet buffer that was received
* @param addr the remote IP address from which the packet was received
* @param port the remote port from which the packet was received
* @retval None
*/
void udp_echoserver_receive_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
{

/* Connect to the remote client */
udp_connect(upcb, addr, UDP_CLIENT_PORT);

/* Tell the client that we have accepted it */
udp_send(upcb, p);

/* free the UDP connection, so we can accept new clients */
udp_disconnect(upcb);

/* Free the p buffer */
pbuf_free(p);

}

udp_echoserver.h的內容如下:

#ifndef __ECHO_H__
#define __ECHO_H__

void udp_echoserver_init(void);

#endif /* __MINIMAL_ECHO_H */

7、至此,所有的工作完成,編譯工程,下載至開發板。由於udp_echoserver中綁定的埠號為7,這里我們通過測試工具測試網路的功能,

⑹ stm32+lwip作為MCU與tcp/ip協議棧,其為一般TCP客戶端,具有斷開重連機制,並作為HTTP的服務端,求代碼!

我正好也在做這方面的東西,我們可以交流一下,我這邊需要做的是TCP客戶端和TCP伺服器,無這邊伺服器搭建目前運行狀況良好,但是客戶端始終不行,請問你有沒有客戶端的相關常式,我這邊的常式也可以分享給你的說,大家相互借鑒,共同進步。

周末加了一天班,終於把問題解決了,總結一個血的教訓給你,就是:你在調試單片機客戶端的時候,作為伺服器的電腦防火牆一定要關掉啊,我就是因為這樣,白忙了兩天。

你要實現客戶端斷開不影響HTTP伺服器的運行,就需要建立兩個不同的TCP_SERVER_pcb和TCP_CLI ENT_pcb結構體,分別用於客戶端和伺服器的TCP/IP協議棧控制。並且需要兩個不同的發送和接收緩存,不然是不行的。

你留下你的郵箱,我把我的常式發給你一份,然後你可以在此基礎上修改為HTTP伺服器

⑺ lwIP求助,關於socket編寫TCP伺服器的問題

查了下,錯誤發生在accept_function()函數中:

/* We have to set the callback here even though
* the new socket is unknown. conn->socket is marked as -1. */
newconn = netconn_alloc(conn->type, conn->callback);

if (newconn == NULL) {
return ERR_MEM;
}

這里返回的 ERR_MEM 導致後面的問題,也就是內存分配出問題了。
到 netconn_alloc() 函數中發現 MEMP_NETCONN 好像沒有定義。。。

⑻ 如何設置k60-k64開發板 enet-2lwip 他的tcp伺服器的ip地址

1、右鍵單擊「網上鄰居」選擇「屬性」,打開網路連接屬性。
2、在右側的「網路任務」欄中點擊「創建一個新的連接。
3、打開新建連接向導,點「下一步」。在
「網路連接屬性」選擇里,點擊「設置高級連接」,點擊「下一步」,然後,在接下來的「高級連接選項」中選擇「接受傳入的連接」。點擊「下一步」。勾尋直接並行(LPT1),點擊「下一步」。
4、勾尋允許虛擬專用連接」,點「下一步」。
5、創建一個允許連接的用戶許可權。點擊「添加」按鈕,輸入雙魚IP轉換器賬戶和密碼後點「確定」。點擊「下一步」繼續。
6、在「網路軟體」中勾選需要用到的協議,一般保持默認即可。點擊「下一步」後,伺服器就搭建完成了。
選擇「開始」→「設置」→「控制面板」→「網路連接」→「創建一個新的連接」→「下一步」→「連接到我的工作場所的網路」→「下一步」→「虛擬專用網路連接」,按說明完成後面的操作即可。

熱點內容
安卓手機怎麼看國內 發布:2025-03-15 05:43:01 瀏覽:729
游戲中心密碼在哪裡看 發布:2025-03-15 05:41:09 瀏覽:941
微信支付android開發 發布:2025-03-15 05:29:35 瀏覽:656
密度值演算法 發布:2025-03-15 05:26:41 瀏覽:318
暑期學編程 發布:2025-03-15 05:21:33 瀏覽:346
加密與 發布:2025-03-15 05:21:25 瀏覽:720
安卓如何把時鍾插件調出來 發布:2025-03-15 05:19:11 瀏覽:50
安卓旋鈕主機音量大小怎麼調整 發布:2025-03-15 05:19:05 瀏覽:755
如何將支付密碼關掉 發布:2025-03-15 05:16:55 瀏覽:933
java培訓學院 發布:2025-03-15 05:11:22 瀏覽:34