概要
最近项目使用rk3588采集icm42688陀螺仪数据上传到服务端进行分析。
整体架构流程
socket代码流程
1.在服务器上采集数据,并将其存储在一个缓冲区中。
2.创建一个socket并将其绑定到服务器的IP地址和端口号上,以便客户端可以连接到该socket。
需要使用bind()函数来绑定socket,并使用listen()函数设置socket的最大连接数。
3.当客户端连接到socket时,需要使用accept()函数接受连接,并创建一个新的socket用于与
该客户端通信。
4.将数据从服务器发送到已连接的客户端。可以使用send()函数来发送数据。
5.当需要关闭连接时,需要使用close()函数关闭socket。
X11 :一个图形窗口系统
X11 是一个图形窗口系统,也是 Linux/Unix 系统中最常用的窗口系统之一。它提供了一种在图形界面下创建和管理程序窗口的方式,并且可以以客户端/服务器模式工作,允许程序在远程计算机上显示其图形界面。使用 X11 库,可以在 Linux/Unix 系统中创建图形界面应用程序。这些应用程序可以包含各种 GUI 元素,如窗口、按钮、文本框、菜单等。X11 库还支持绘制 2D 图形,如直线、矩形、圆形等,以及显示图片和视频。除此之外,X11 库还支持多种输入设备,如鼠标、键盘、触摸屏等,使得程序可以响应用户的交互操作。
局部代码示例
客户端显示窗口代码
dpy = XOpenDisplay((0)); /*使用 XOpenDisplay 函数打开一个与 X 服务器的连接,并返回连接对象 dpy */
win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0,0, xx, yy, 0,0,0);/*使用 DefaultRootWindow 函数获取默认屏幕的根窗口,并将其作为父窗口。使用 XCreateSimpleWindow 函数创建一个简单的窗口*/
XSelectInput(dpy, win, StructureNotifyMask);/*使用 XSelectInput 函数设置窗口感兴趣的事件类型,这里设置为特定类型的通知事件*/
XMapWindow(dpy, win);/*使用 XMapWindow 函数将窗口映射到显示器上,使其可见。*/
gc = XCreateGC(dpy, win, 0, (0));
XSetForeground(dpy,gc,0);/*使用 XSetForeground 函数设置前景色,这里设置为 0,即黑色*/
服务端简单代码示例
#define PORT 8080
int main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 创建socket文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置socket选项:允许地址重用
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
exit(EXIT_FAILURE);
}
// 设置socket地址
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定socket
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听socket
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
// 等待客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
perror("accept");
exit(EXIT_FAILURE);
}
// 发送数据到客户端
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent\n");
}
发送数据代码
int sendServer(char *data,int len)
{
send(new_socket, data, len, 0);
return 0;
}
接收代码
while(1)
{
valread = read(client_fd, buffer, 64); // 1024
........
}