<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 利用stm32的lwip TCP/IP協(xié)議棧的通信的思路

利用stm32的lwip TCP/IP協(xié)議棧的通信的思路

作者: 時(shí)間:2016-12-03 來(lái)源:網(wǎng)絡(luò ) 收藏
利用stm32f103vet6作為平臺,enc28j60網(wǎng)卡,lwip tcp/ip作為協(xié)議棧進(jìn)行相應的程序編寫(xiě)。

Stm32作為服務(wù)器與stm32作為客戶(hù)端程序編寫(xiě)的基本步驟,思路清理:

本文引用地址:http://dyxdggzs.com/article/201612/325181.htm

1、stm32作為服務(wù)器端

當stm32作為服務(wù)器端的時(shí)候,首先有一點(diǎn)要明確的是端口與ip的確定性,當然,后期需要改變的是,如果服務(wù)器地址的變動(dòng),就需要相應的做些程序的改變。

程序的步驟如下所示:

1、利用lwip對網(wǎng)卡做相應的初始化工作,例如ip地址,網(wǎng)絡(luò )掩碼,以及網(wǎng)關(guān)的操作。

2、對服務(wù)器端的相應操作。(包括pcb控制塊的獲取,結構體的初始化工作。)

3、綁定相應的遠程計算機,設置相應的ip地址和端口。

4、監聽(tīng)相應的信息

注意:監聽(tīng)的時(shí)候,需要重新設置的是pcb結構體的內存布局,節省內存空間。監聽(tīng)其實(shí)也是一個(gè)獲取信息的過(guò)程,控制塊在進(jìn)行回調的時(shí)候,是有主機相關(guān)的參與,控制塊也會(huì )相應的改變。

5、連接

在監聽(tīng)相應的端口的操作完畢之后,數據的接收和發(fā)送的工作就在這個(gè)時(shí)刻完成,在接收數據的程序當中,相應的可以通過(guò)一個(gè)tcp_write的操作將數據顯示在瀏覽器當中。需要明確的是,一個(gè)send的數據,和一個(gè)write的功能是有差別的。

最后注意一點(diǎn):

由于stm32是一個(gè)服務(wù)器端,因此不可避免的是,服務(wù)器端的tcp連接是不用手動(dòng)進(jìn)行斷開(kāi)的,那么有兩個(gè)操作是附帶的。一個(gè)是pcb控制塊的內存空間是不用進(jìn)行釋放的,另外一個(gè)就是tcp的連接是不用斷開(kāi)的。

2、stm32作為客戶(hù)端

Stm32作為客戶(hù)端,所需要的操作和stm32作為服務(wù)器端的思想有一個(gè)轉變的過(guò)程,思路如下:

1、初始化網(wǎng)卡的相關(guān)信息??蛻?hù)端的相關(guān)操作有,ip地址,掩碼,網(wǎng)關(guān)的操作。

2、pcb塊的獲取。進(jìn)行相關(guān)的結構體的初始化,分配內存空間。

3、進(jìn)行連接。前提是有Ip地址和相應的端口可以給出,這里API給出了相關(guān)的回調方法(函數)。

4、釋放掉pcb塊的內存。

5、斷開(kāi)tcp的連接。

2013年7月11日晚上:

今天一天都在調試tcp_connect()函數,唉,現在分析一下原因:一、網(wǎng)上的資料,弄來(lái)弄去,都是一個(gè)將stm32當作服務(wù)器,很少是將stm32當作客戶(hù)端的,也許,配置pc服務(wù)器對它們來(lái)說(shuō)是一件費力的事情。二、沒(méi)有資料,只好自己一下下花時(shí)間的去調試,可悲的是,晚上才明白原來(lái)自己把網(wǎng)絡(luò )的遠程地址的賦值方法設置的是有一定問(wèn)題的,我是按照給的方案塞地址的,這種方法不對。三、我懷疑的是我搭建的服務(wù)器有問(wèn)題,確實(shí),再我回頭搞服務(wù)器的時(shí)候,它卻根本不聽(tīng)我的話(huà)。三、就是電腦的防火墻,這個(gè)我只能是聽(tīng)網(wǎng)上的說(shuō)這個(gè)東東。

解決辦法是:上面我給的思路是沒(méi)有問(wèn)題的,按照那個(gè)思路,離成功不遠,也許一次能成功,都是靠慢慢來(lái)的。而且,昨天,我在做這個(gè)測試的完畢,想上網(wǎng)的時(shí)候,給電腦插上網(wǎng)線(xiàn),我的電腦不能上網(wǎng)了,郁悶,難道我還得考慮網(wǎng)卡的問(wèn)題,而且,網(wǎng)卡燈是閃著(zhù)的,卻不能上……,當然,今天我是測速過(guò)ping的。wireshark也是做了哦。

服務(wù)器的配置,可以用C++進(jìn)行配置,當然也可以用java來(lái)配置,這個(gè)比C++簡(jiǎn)單多了。

代碼附上:

package ServerAndCustomer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(10000);
Socket socket = server.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
System.out.println(line);
socket.close();
server.close();
}

}
當然了,一般是需要給客戶(hù)端寫(xiě)上測試程序的:

package ServerAndCustomer;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class customer {
public static void main(String[] args) throws Exception{
Socket socket = new Socket(InetAddress.getLocalHost(), 10000);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("i am customer");

bw.close();
socket.close();
}
}
終于將代碼與思路理清,lwip還是有很多的內容值得我們學(xué)習啊…



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>