您的位置 首页 传感器

使用stm32的lwip TCP/IP协议栈的通讯的思路

利用stm32f103vet6作为平台,enc28j60网卡,lwiptcp/ip作为协议栈进行相应的程序编写。Stm32作为服务器与stm32作为客户端程序编写的基本…

使用stm32f103vet6作为渠道,enc28j60网卡,lwip tcp/ip作为协议栈进行相应的程序编写。

Stm32作为服务器与stm32作为客户端程序编写的底子进程,思路整理:

1、stm32作为服务器端

当stm32作为服务器端的时分,首要有一点要清晰的是端口与ip的确定性,当然,后期需求改动的是,假如服务器地址的变化,就需求相应的做些程序的改动。

程序的进程如下所示:

1、使用lwip对网卡做相应的初始化作业,例如ip地址,网络掩码,以及网关的操作。

2、对服务器端的相应操作。(包含pcb操控块的获取,结构体的初始化作业。)

3、绑定相应的长途计算机,设置相应的ip地址和端口。

4、监听相应的信息

留意:监听的时分,需求从头设置的是pcb结构体的内存布局,节约内存空间。监听其实也是一个获取信息的进程,操控块在进行回调的时分,是有主机相关的参加,操控块也会相应的改动。

5、衔接

在监听相应的端口的操作结束之后,数据的接纳和发送的作业就在这个时间完结,在接纳数据的程序傍边,相应的能够经过一个tcp_write的操作将数据显现在浏览器傍边。需求清晰的是,一个send的数据,和一个write的功用是有不同的。

最终留意一点:

因为stm32是一个服务器端,因而不可避免的是,服务器端的tcp衔接是不必手动进行断开的,那么有两个操作是顺便的。一个是pcb操控块的内存空间是不必进行开释的,别的一个便是tcp的衔接是不必断开的。

2、stm32作为客户端

Stm32作为客户端,所需求的操作和stm32作为服务器端的思维有一个改变的进程,思路如下:

1、初始化网卡的相关信息。客户端的相关操作有,ip地址,掩码,网关的操作。

2、pcb块的获取。进行相关的结构体的初始化,分配内存空间。

3、进行衔接。条件是有Ip地址和相应的端口能够给出,这儿API给出了相关的回调办法(函数)。

4、开释掉pcb块的内存。

5、断开tcp的衔接。

2013年7月11日晚上:

今日一天都在调试tcp_connect()函数,唉,现在剖析一下原因:一、网上的材料,弄来弄去,都是一个将stm32当作服务器,很少是将stm32当作客户端的,或许,装备pc服务器对它们来说是一件吃力的工作。二、没有材料,只好自己一下下花时间的去调试,可悲的是,晚上才理解本来自己把网络的长途地址的赋值办法设置的是有必定问题的,我是依照给的计划塞地址的,这种办法不对。三、我置疑的是我建立的服务器有问题,的确,再我回头搞服务器的时分,它却底子不听我的话。三、便是电脑的防火墙,这个我只能是听网上的说这个东东。

解决办法是:上面我给的思路是没有问题的,依照那个思路,离成功不远,或许一次能成功,都是靠慢慢来的。并且,昨日,我在做这个测验的结束,想上网的时分,给电脑插上网线,我的电脑不能上网了,抑郁,莫非我还得考虑网卡的问题,并且,网卡灯是闪着的,却不能上……,当然,今日我是测速过ping的。wireshark也是做了哦。

服务器的装备,能够用C++进行装备,当然也能够用java来装备,这个比C++简略多了。

代码附上:

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();
}

}
当然了,一般是需求给客户端写上测验程序的:

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仍是有许多的内容值得咱们学习啊…

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/252329.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部