软件总框架:
网络输入单元测试
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
单元测试:
总结:
- 添加main函数,使用g_tNetinputDev.DeviceInit()完成输入设备初始化,使用g_tNetinputDev.GetInputEvent(&event)完成输入事件数据获取。
- 添加client.c ,使用socket()函数创建套接字,使用sendto()函数向服务器发送数据;若使用了connect()函数连接远端服务器,则需要使用send函数发送数据。使用close()函数关闭套接字。



