//=====================================================================
//TITLE:
// STM32F2xx的tcp_echoserver例程解说
//AUTHOR:
// norains
//DATE:
// Monday 04-July-2011
//Environment:
// Keil MDK 4.2
// STM32F207 核心版
//===================================================================== 最近拿到STM32F207的核心版,板载有网卡芯片,自然要拿过来捣鼓一番。而对于一个从未接触过网络的菜鸟来说,最好的入门方式就是揣测ST公司的例程,所以今天norains也不例外。那么我们就一起来看看这个官方的例程吧! 首先我们来了解C/S网络程序的工作流程,如图:
这个图并不是norains所绘制的,而是网上流传的一个名为《TCP/IP Socket网络编程》的PPT所截取的。这个流程各位一定要熟悉,因为接下来所描述的例子流程,和该图例非常吻合。
ST关于TCP的例程分为client和server,根据字面意思,可以知道tcp_echoserver例程是将STM32F2xx作为server来用。而例程的第一步呢,便是初始化,调用的是tcp_echoserver_init()函数。 在tcp_echoserver_init()函数里,主要做了这么几件事情:
1. 创建一个新的TCP协议控制块
2. 绑定地址和端口号(port)
3. 开始监听(listen)
4. 设置accept的回调函数 其完整代码如下: void tcp_echoserver_init(void)
{
//创建一个新的TCP控制块
tcp_echoserver_pcb = tcp_new();
if (tcp_echoserver_pcb != NULL)
{
err_t err;
//绑定到端口7
err = tcp_bind(tcp_echoserver_pcb, IP_ADDR_ANY, 7);
if (err == ERR_OK)
{
//开始监听
tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);
//设置tcp_echoserver_accept为accept的回调函数
tcp_accept(tcp_echoserver_pcb, tcp_echoserver_accept);
}
else
{
printf("Can not bind pcb\n"); //norains 2011-7-4 comment
}
}
else
{
printf("Can not create new pcb\n"); //norains 2011-7-4 comment
}
}
|