ARM7单片机+RTL8019嵌入式TCP_IP协议栈使用分析
五、SOCKET API应用举例
1)简单WEB服务器--通过函数TCP_TEST()完成设置本地TCP服备器的IP地址,其过程如下:
1.调用SOCKET API函数socket(0,0,TCP_PROTOCOL)分配一个SOCKET,
2.调用SOCKET API函数将TCP server的IP地址与SOCKET绑定,调用函数bind()起动监听。
3.函数TCP_TEST()通过函数accept()接收网页获取请求,调用函数recv()接收HTTP命令,根据命令调用函数send()发送http网页。
WEB服务器程序清单
/*****************************************************
* 名称:TCP_TEST()
* 功能:设置TCP模块
* 入口:无
* 出口: 无
*********************************************************/
void TCP_SETUP(void)
{
/*设置本地TCP服备器的IP地址*/
TCP_serveraddr.sin_family = 0;
TCP_serveraddr.sin_addr[0] = MY_IP_ADD[0];
TCP_serveraddr.sin_addr[1] = MY_IP_ADD[1];
TCP_serveraddr.sin_addr[2] = MY_IP_ADD[2];
TCP_serveraddr.sin_addr[3] = MY_IP_ADD[3];
TCP_serveraddr.sin_port = 80;
/*将TCP server的IP地址与SOCKET绑定*/
t = socket(0,0,TCP_PROTOCOL);
iii=bind(t,TCP_serveraddr,sizeof(TCP_serveraddr));
iii=listen(t,4);
}
/********************************************************
* 名称:TCP_TEST()
* 功能:TCP打开网页测试
* 入口:无
* 出口: 无
********************/
void TCP_TEST(void)
{
temp = accept(t,TCP_clientaddr,iii);/*accept网页获取请求*/
if(temp != 0xffff)
{ templen = recv(temp,TCP_rec_buff,1024,0);
if(TCP_rec_buff[5] == ' ')
{ send(temp,httpweb,169,0); /*发送http网页*/
send(temp,web,395,0);
}
else if(TCP_rec_buff[5] == '1')
{
send(temp,httpgif,169,0); /*发送GIF,BMP图片背景*/
send(temp,bmp,442,0);
}
close(temp);
}
}
2)简单UDP服务器—通过函数UDP_TEST()完成设置本地UDP服备器的IP地址和远端口服务器的IP地址, 其过程如下:
1.调用SOCKET API函数socket(0,0,TCP_PROTOCOL)分配一个SOCKET
2.调用SOCKET API函数bind()将UDP server的IP地址与SOCKET绑定,将调用SOCKET API函数enable_a_port_listen(1025)起动监听。
3.函数UDP_TEST()通过函数recfrom()接收UDP数据报,接收到的UDP数据报调用SOCKET API函数sendto()回传远程服务器。
UDP服务器程序清单
* 名称:UDP_SETUP()
* 功能:设置UDP模块
* 入口:无
* 出口: 无
***********************************************************/
void UDP_SETUP(void)
{
serveraddr.sin_family = 0; /*设置远端服务器的IP地址*/
serveraddr.sin_addr[0] = 192;
serveraddr.sin_addr[1] = 168;
serveraddr.sin_addr[2] = 0;
serveraddr.sin_addr[3] = 1;
serveraddr.sin_port = 1026;
s = socket(0,0,UDP_PROTOCOL);
clientaddr.sin_family = 0; /*设置本地UDP客户端的IP地址*/
clientaddr.sin_addr[0] = MY_IP_ADD[0];
clientaddr.sin_addr[1] = MY_IP_ADD[1];
clientaddr.sin_addr[2] = MY_IP_ADD[2];
clientaddr.sin_addr[3] = MY_IP_ADD[3];
clientaddr.sin_port = 1025;
/*将本地IP地址与SOCKET绑定*/
iii=bind(s,clientaddr,sizeof(clientaddr));
enable_a_port_listen(1025);
}
/************************************************************
* 名称:UDP_TEST()
* 功能:UCP数据报收发测试
* 入口:无
* 出口: 无
*************************************************************/
void UDP_TEST(void)
{
/*接收UDP数据报*/
len = recvfrom(s,rec_buff,400,0,serveraddr,iii);
if(len > 0)
{ /*将接收到的UDP数据报发送回服务器端*/
sendto(s,rec_buff,len,0,serveraddr,iii);
}
}
- 实时操作系统μC/OS-II在ARM7上的移植(05-12)
- ARM7与FPGA在工业控制中的结合应用 (06-26)
- ARM7与FPGA在工业控制的结合 (07-03)
- 基于ARM7和DSP的逆变电源设计电路(01-08)
- ARM7嵌入式系统在车辆调度中的应用范畴(07-06)
- ARM系列微处理器简介之:初识ARM系列处理器(08-13)