微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM7单片机+RTL8019嵌入式TCP_IP协议栈使用分析

ARM7单片机+RTL8019嵌入式TCP_IP协议栈使用分析

时间:12-05 来源:互联网 点击:

五、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);
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top