栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数字量产工具:输入系统-网络输入单元测试

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数字量产工具:输入系统-网络输入单元测试

软件总框架:

网络输入单元测试

main 函数:

int main(int argc, char **argv)
{
    InputEvent event;
    int ret;
    g_tNetinputDev.DeviceInit();
    while (1)
    {
        ret = g_tNetinputDev.GetInputEvent(&event);
        if (ret)
        {
            printf("GetInputEvent errrn");
            return -1;
        }
        else
        {
            printf("iType       =%drn", event.iType);
            printf("str         =%srn", event.str);
        }
    }
    return 0;
}

编译调试后,netinput.c 内容

#include  
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "input_manager.h"

#define SERVER_PORT 8888

static int g_iSocketServer;

static int NetinputGetInputEvent(PInputEvent ptInputEvent)
{
    char aRecvBuf[1000];
    int iRecvLen;
    struct sockaddr_in tSocketClientAddr;

    unsigned int iAddrLen = sizeof(struct sockaddr);
    
    iRecvLen = recvfrom(g_iSocketServer, aRecvBuf, sizeof(aRecvBuf), 0, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
    if (iRecvLen > 0)
    {

        aRecvBuf[iRecvLen] = '';
        //printf("Get Msg from %s : %sn", inet_ntoa(socket_client_addr.sin_addr), buf);
        ptInputEvent->iType = INPUT_TYPE_NET;
        gettimeofday(&ptInputEvent->tTime, NULL);
        strncpy(ptInputEvent->str, aRecvBuf, 1000);
        ptInputEvent->str[999] = '';
        return 0;
    }
    else
        return -1;
}

static int NetinputDeviceInit(void)
{
    struct sockaddr_in tSocketServerAddr;
    int iRet;

    
    g_iSocketServer = socket(AF_INET, SOCK_DGRAM, 0);
    if (g_iSocketServer == -1)
    {
        printf("socket error");
        return -1;
    }

    
    tSocketServerAddr.sin_family = AF_INET;
    tSocketServerAddr.sin_port = htons(SERVER_PORT);
    tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;
    memset(tSocketServerAddr.sin_zero, 0, 8);

    
    iRet = bind(g_iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));
    if (iRet == -1)
    {
        printf("bind error!n");
        return -1;
    }
    return 0;
}

static int NetinputDeviceExit(void)
{
    close(g_iSocketServer);
    return 0;
}

static InputDevice g_tNetinputDev = {

    .name = "netinput",
    .GetInputEvent = NetinputGetInputEvent,
    .DeviceInit = NetinputDeviceInit,
    .DeviceExit = NetinputDeviceExit,

};

#if 1

int main(int argc, char **argv)
{
    InputEvent event;
    int ret;
    g_tNetinputDev.DeviceInit();
    while (1)
    {
        ret = g_tNetinputDev.GetInputEvent(&event);
        if (ret)
        {
            printf("GetInputEvent errrn");
            return -1;
        }
        else
        {
            printf("iType       =%drn", event.iType);
            printf("str         =%srn", event.str);
        }
    }
    return 0;
}

#endif

在unittest目录下添加 client.c

#include  
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVER_PORT 8888

int main(int argc, char **argv)
{
	int iSocketClient;
	struct sockaddr_in tSocketServerAddr;

	int iRet;
	int iSendLen;
	int iAddrLen;

	if (argc != 3)
	{
		printf("Usage:n");
		printf("%s  n", argv[0]);
		return -1;
	}

	iSocketClient = socket(AF_INET, SOCK_DGRAM, 0);

	tSocketServerAddr.sin_family = AF_INET;
	tSocketServerAddr.sin_port = htons(SERVER_PORT); 
	//tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;
	if (0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr))
	{
		printf("invalid server_ipn");
		return -1;
	}
	memset(tSocketServerAddr.sin_zero, 0, 8);

#if 0
	iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));	
	if (-1 == iRet)
	{
		printf("connect error!n");
		return -1;
	}
#endif

	iAddrLen = sizeof(struct sockaddr);
	iSendLen = sendto(iSocketClient, argv[2], strlen(argv[2]), 0,
					  (const struct sockaddr *)&tSocketServerAddr, iAddrLen);

	close(iSocketClient);

	return 0;
}

单独编译client.c

arm-linux-gnueabihf-gcc -o client client.c

单元测试:

总结:

  1. 添加main函数,使用g_tNetinputDev.DeviceInit()完成输入设备初始化,使用g_tNetinputDev.GetInputEvent(&event)完成输入事件数据获取。
  2. 添加client.c ,使用socket()函数创建套接字,使用sendto()函数向服务器发送数据;若使用了connect()函数连接远端服务器,则需要使用send函数发送数据。使用close()函数关闭套接字。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873086.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号