CODE_LINUX_APP_ETHERNET

主要用途:该IP为以太网的API库,提供了服务器端的收发功能,支持TCP/UDP。

能力分类:嵌入式

应用领域:电源电池,健康医疗,智能家居,照明显示,国防军工

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

基于Linux Socket 函数实现能够进行TCP和UDP传输的服务器功能模块

1.2  主要功能

IP为以太网的API库,提供了服务器端的收发功能,支持TCP/UDP。

 标准模块

 模块设计

结构体设计

1. Struct ETHERNET的结构来存储传入的网络传输配置参数(协议类型,主机地址以及侦听端口号)以及socket文件描述和收发缓存等信息

typedef  struct ETHNET{

dll_t node;

devClass    class;

ETH_PRO  protocol;//tcp or udp

int    sock;//server socket

int  clientSock;//client socket

struct sockaddr_in addr;

int     port;//tcp/udp port

char  ipaddr[16];//the local ip address

int    flag;

char *   buff;//buffer to read/write

int32  buffMaxLen;

int32 buffRealLen;

}objEthnet;

2. 

 

主要函数说明

以太网设备初始化函数

函数原型

objEthnet *   ethnet_open( int port, int32 buffLen)

功能描述

创建并初始化一个以太网设备

输入参数

int port:以太网端口

int32 buffLen:数据缓冲区大小;

输出参数

全局变量值的变化

返回值

以太网设备对象指针

 

读取以太网设备数据函数

函数原型

STATUS ethnet_get(objEthnet *  obj)

功能描述

读取以太网设备数据

输入参数

objEthnet *  obj:以太网设备对象指针 

 

输出参数

objEthnet *  obj:以太网设备对象指针

全局变量值的变化

返回值

OK-成功

ERROR-失败

 

写入数据以太网设备函数

函数原型

STATUS ethnet_put(objEthnet *  obj)

功能描述

写入数据到以太网设备

输入参数

objEthnet *  obj:以太网设备对象指针 

 

输出参数

objEthnet *  obj:以太网设备对象指针

全局变量值的变化

返回值

OK-成功

ERROR-失败

 

关闭以太网设备函数

函数原型

STATUS ethnet_close(objEthnet *  obj)

功能描述

写入数据到以太网设备

输入参数

objEthnet *  obj:以太网设备对象指针 

 

输出参数

 

全局变量值的变化

返回值

OK-成功

 

 类定义

应用举例

基于API实现能够测试以太网控制器作为服务器端收发数据的测试程序

int ethnettest(int argc, char **argv)

{

 STATUS  ret  =  OK;

 int i = 0,j=0;

 ETH_PRO protocol = 0;

 char * pro = NULL;

 int error = 0;

 int result = PASS;

 char *sendbuff;

 char *recvbuff;

 int bufflen = 0;

 uint32 count = 0;

 int port  = 0;

 objEthnet * pEthnet = NULL;

 

 pEthnet = ethnet_open(protocol, “127.0.0.1”, port, 1024);

 if(NULL == pEthnet)

 {

ret |= ERR_INIT_ETHNET;

OUT_MSG("init udp error\n");

result = FAIL;

goto QUIT;

 }

 OUT_MSG("test Ethnet start\n");

 

 for(i = 0; i < count;++i)

 {

  pEthnet->buffRealLen = pEthnet->buffMaxLen;

           if (OK == ethnet_get(pEthnet))

           {

                 OUT_MSG("receive data from %s:%s\r\n", inet_ntoa(pEthnet->addr.sin_addr), pEthnet->buff);

                if( !check(recvbuff, pEthnet->buff, strlen(recvbuff)))

                {

                    OUT_MSG("receive[%d] data from ethnet  failed.\r\n", i);

                    result = FAIL;

                   }

                    /* now the server send message to client */

                   bufflen = strlen(sendbuff);

                     strncpy(pEthnet->buff,  sendbuff, bufflen);

                     pEthnet->buff[bufflen] = '\0';

                     pEthnet->buffRealLen = bufflen+1;

                   if (OK != ethnet_put(pEthnet))

                   {

                     result = FAIL;

                     OUT_MSG("ethnet[%d] send error.\n",i);

                   }

            }else{

             OUT_MSG("receive[%d] data from ethnet  failed.\r\n", i);

             result = FAIL;

           }

}//end for

QUIT:

if(PASS == result)     OUT_MSG("test Ethnet PASS\n");

else   OUT_MSG("test Ethnet FAIL\n");

/* Return happy */

return ret;

}

 

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>