【原创】关于Lwip的例程
0赞周六晚上一位网友加我QQ与我聊到有关Lwip的问题,他说对于一个刚刚接触Lwip的他,对于整个过程还不是很清楚。让我帮写一个Lwip的例子程序,从初始化到发送数据、接收数据。他们公司的需求是想做一个客户端,往服务器发送数据,但是在对于网上的一些资料,大部分都是Lwip做的是服务端。一个基于web的程序。虽然大体上似乎相同,可对于初学者而言,肯本就不能让该程序移植成自己所需要的功能。
下面我将基于以太网的Lwip这个程序的例子程序写出来,供给初学者参考。
/*
*******************************************************************************
* SmallBoxLwIP
*Description: LwIP函数入口
*Arguments : 无
*Returns : 无
*Note : V1.0 by Small.Box at 2007.02.14
*******************************************************************************
*/
void SmallBoxLwIP(void *arg)
{
struct netconn *conn;
int i,length;
unsigned char LD_Send_BUF[500];
unsigned char *pbData;
pTCPCONN tcpconn;
struct LocalIPconfig Localipconfig;
for(i=0;i<500;i++) {
LD_Send_BUF[i]=0x55;
}
//为了让大家看的更清楚,以下设置本地IP地址和远程IP地址将采用最直观的方式,还有其他简单的方法,见以前发表过的文章。
//设置本地IP地址
Localipconfig.ipaddr[0] = 192;
Localipconfig.ipaddr[1] = 168;
Localipconfig.ipaddr[2] = 2;
Localipconfig.ipaddr[3] = 2;
//设置本地网关
Localipconfig.gateway[0] = 192;
Localipconfig.gateway[1] = 168;
Localipconfig.gateway[2] = 2;
Localipconfig.gateway[3] = 1;
//设置本地的子网掩码
Localipconfig.mask[0] = 255;
Localipconfig.mask[1] = 255;
Localipconfig.mask[2] = 255;
Localipconfig.mask[3] = 0;
//设置服务端的IP地址
tcpconn->ipaddr[0] = 192;
tcpconn->ipaddr[1] = 168;
tcpconn->ipaddr[2] = 2;
tcpconn->ipaddr[3] = 1;
tcpconn->port = 5000; //设置端口号
//初始化Lwip
LwIPInit();
//初始化以太网
SetupLwIP_Ethernet(Localipconfig);
while(1) {
conn = OpenTCPIPDev(tcpconn); //打开TCP链接
while(1) {
length = ReadTCPIPDev(conn,&pbData); //读取数据
if(length > 0) {
WriteTCPIPDev(conn,LD_Send_BUF,200); //发送数据
CloseTCPIPDev(conn);
OSTimeDlyHMSM(0,0,2,0);
break;
}
OSTimeDlyHMSM(0,0,2,0);
}
}
}
各位请注意以上程序红色部分的IP地址,为什么本地的网关和服务端的IP地址是相同的呢?
下面我将我测试的环境介绍一个
本人电脑操作系统Windows XP
网络配置:三块网卡
IP地址分别为:192.168.0.52 192.168.2.1 192.168.8.52
192.168.0.52 走公司的服务器连接外网;
192.168.2.1 连接我们的产品终端,也就是带有LWIP协议的终端
192.168.8.52 连接路由走外网。
具体只用到那一块网卡。为了测试方便,故将我们的终端连接第二块网卡。你也可以连接到你们公司的局域网,设置好IP地址,就以了。这些都取决于你的测试网络情况而定,若不明白设置,请找一本有关网络技术的书籍作为参考吧。
由于本人的表述能力有限,对于以上写的程序和阐述的语言有什么不明白的地方,请在下面给我留言。我会及时给您回复。谢谢!!!!
