ARM7單片機(jī)+RTL8019嵌入式TCP_IP協(xié)議棧使用分析
WEB服務(wù)器程序清單
/*****************************************************
* 名稱:TCP_TEST()
* 功能:設(shè)置TCP模塊
* 入口:無
* 出口: 無
*********************************************************/
void TCP_SETUP(void)
{
/*設(shè)置本地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打開網(wǎng)頁測試
* 入口:無
* 出口: 無
********************/
void TCP_TEST(void)
{
temp = accept(t,TCP_clientaddr,iii);/*accept網(wǎng)頁獲取請求*/
if(temp != 0xffff)
{ templen = recv(temp,TCP_rec_buff,1024,0);
if(TCP_rec_buff[5] == ' ')
{ send(temp,httpweb,169,0); /*發(fā)送http網(wǎng)頁*/
send(temp,web,395,0);
}
else if(TCP_rec_buff[5] == '1')
{
send(temp,httpgif,169,0); /*發(fā)送GIF,BMP圖片背景*/
send(temp,bmp,442,0);
}
close(temp);
}
}
2)簡單UDP服務(wù)器—通過函數(shù)UDP_TEST()完成設(shè)置本地UDP服備器的IP地址和遠(yuǎn)端口服務(wù)器的IP地址, 其過程如下:
1.調(diào)用SOCKET API函數(shù)socket(0,0,TCP_PROTOCOL)分配一個SOCKET
2.調(diào)用SOCKET API函數(shù)bind()將UDP server的IP地址與SOCKET綁定,將調(diào)用SOCKET API函數(shù)enable_a_port_listen(1025)起動監(jiān)聽。
3.函數(shù)UDP_TEST()通過函數(shù)recfrom()接收UDP數(shù)據(jù)報,接收到的UDP數(shù)據(jù)報調(diào)用SOCKET API函數(shù)sendto()回傳遠(yuǎn)程服務(wù)器。
UDP服務(wù)器程序清單
* 名稱:UDP_SETUP()
* 功能:設(shè)置UDP模塊
* 入口:無
* 出口: 無
***********************************************************/
void UDP_SETUP(void)
{
serveraddr.sin_family = 0; /*設(shè)置遠(yuǎn)端服務(wù)器的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; /*設(shè)置本地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數(shù)據(jù)報收發(fā)測試
* 入口:無
* 出口: 無
*************************************************************/
void UDP_TEST(void)
{
/*接收UDP數(shù)據(jù)報*/
len = recvfrom(s,rec_buff,400,0,serveraddr,iii);
if(len > 0)
{ /*將接收到的UDP數(shù)據(jù)報發(fā)送回服務(wù)器端*/
sendto(s,rec_buff,len,0,serveraddr,iii);
}
}
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
tcp/ip相關(guān)文章:tcp/ip是什么
評論